- en
- ru
Table of Contents
Updates
Апдейты помогают нам и Вам содержать Вашу копию в актуальном состоянии. С апдейтами в скрипте добавляются новые функции и тд. В пределах одного апдейта бывают разные билды с небольшими поправками. Апдейт и билд написан в конце каждой страницы.
How to run update
Нажать в админке Maintenance - Update или запустить в шеле
cd your_path_to/scj/admin/ php update.php
и скрипт будет проапдейчен до текущей версии
TCMS (Smartcj 2.X) Updates
SmartCJ v 1.X Updates
В версии 1 каждый апдейт надо было ставить по очереди те
cd your_path_to/scj/admin/ php update.php номер_апдейта например у вас 49, надо сделать 52 php update.php 50 php update.php 51 php update.php 52
- Базовая строка для проведения всех апдейтов. Она обновит ваш скрипт до послденией версии
cd /path_to_scj/admin; env HTTP_HOST=yourdomain.com php update.php
Как провести какой-то определенный апдейт
cd /path_to_scj/admin; env HTTP_HOST=yourdomain.com php update.php номер_апдейта например cd /home/vasya/domain.com/scj/admin; env HTTP_HOST=domain.com php update.php 45
Исходник update.php
<?php
require('../includes/prepare.php');
require('../includes/libs/http_functions.php');
// out of space fix
$df = disk_free_space("./");
if ($df < 5*1024*1024) {
die("No enough space for update");
}
// slow connection fix
$mysql_version = db_value('ver', 'select version() as ver');
if (stristr($d['ver'], '5.')) {
db_query("set wait_timeout=240");
}
if ($argv[1] != '') {
$num = (int) $argv[1];
if ($num > 0) {
ProcessUpdate($num);
exit;
}
}
$tmp = get_url("http://smartcj.com/smartnews.php?action=last_update");
if ($tmp['status'] != 200) {
die("Can not get last update number, please, contact support");
}
$last_script_version = $tmp['body'];
if ($last_script_version == $settings['last_update_number'] and !$_REQUEST['force_update']) die("You have the lastest version.");
while ($settings['last_update_number'] < $last_script_version) {
echo "Processing " . ($settings['last_update_number']+1) . "\n";
if (ProcessUpdate($settings['last_update_number']+1)) {
$settings['last_update_number']++;
}
}
function ProcessUpdate($update_id) {
global $settings;
$tmp = get_url("http://smartcj.com/updates/".(int)$update_id."/update.txt");
if ($tmp['status'] != 200) {
echo "Sorry, can not find update {$update_id}";
return false;
}
$_REQUEST['terms_read'] = true;
ob_start();
eval ('?>' . $tmp['body']);
$res = ob_get_clean();
$res = str_replace('<br>', "\n", $res);
echo strip_tags($res);
return true;
}
Как проапдейтить сразу все домены
Можно создать файл например update.sh в котором будут строки по примеру
cd /path_to_domain/scj/admin; env HTTP_HOST=yourdomain.com php update.php cd /path_to_domain2/scj/admin; env HTTP_HOST=yourdomain2.com php update.php
и так далее нужное кол-во строк. И запустить его из шела
sh update.sh
При установке и апдейте скрипт не пишет index.php и вообще какие-либо файлы на корень домена, что б случайно не переписать если у вас там что-то свое. Соответственно при апдейтах, возникает вопрос копирвоания инедкса смарта, если он используется на руте домена. Есть 2 варианта:
- добавить в update.sh строки типа cp ../cgi/index.php ../../index.php
- или сразу при инстале не копировать индекс, а сделать симлинк на соотв каталог.
Как откатить апдейт
Единственный вариант - если у вас есть бекап с нужной версии.
Надо поставить скрипт этой версии и залить бекап мускла той же версии.
Просто так залить в скрипт версии например 45 бекап мускла из версии 44 - нельзя.
Как провести апдейт на сайте с очень большой базой
Апдейт может быт достаточно тяжелой процедурой для сервера, при этом некоторые страницы могут закешироваться неправильно и тп. Некоторые сервисы например в случае релиза большого апдейта обычно делают это ночью и закрывают сайт, показывая стандартное сообщение о том, что сервис будет доступен через несоклько часов. Но если вы не хотите прерывать работу можно сделать следующим образом. Для этого надо
- Поставить скрипт на другой (суб)домен, идеально на другом серваке
- Залить туда дам базы с главного домена
- Запустить апедйт на этом отдельном субдомене
- На нем отработают все тяжелые процедуры по базе, при этом основной сайт затронут не будет
- Перелить базу со вспомогательного домена на основной
- Провести апедйт на основном - он пройдет быстро тк база уже изменена, надо будет только скачать файлы.
