====== Updates ======
Апдейты помогают нам и Вам содержать Вашу копию в актуальном состоянии. С апдейтами в скрипте добавляются новые функции и тд. В пределах одного апдейта бывают разные билды с небольшими поправками. Апдейт и билд написан в конце каждой страницы.
====== How to run update ======
Нажать в админке Maintenance - Update или запустить в шеле
cd your_path_to/scj/admin/
php update.php
и скрипт будет проапдейчен до текущей версии
====== TCMS (Smartcj 2.X) Updates ======
[[ru:tcms_update_1|Update 1]]
====== 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
[[Update 52]]
[[Update 51]]
[[Update 50]]
[[Update 49]]
[[Update 48]]
[[Update 47]]
[[Update 46]]
[[Update 45]]
[[Update 44]]
[[Update 43]]
[[Update 42]]
[[Update 41]]
[[Update 40]]
[[Update 39]]
[[Update 38]]
[[Update 37]]
[[Update 36]]
[[Update 35]]
[[Update 34]]
[[Update 33]]
[[Update 32]]
[[Update 31]]
[[Update 30]]
[[Update 29]]
[[Update 28]]
* Базовая строка для проведения всех апдейтов. Она обновит ваш скрипт до послденией версии
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
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('
', "\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 - нельзя.
====== Как провести апдейт на сайте с очень большой базой ======
Апдейт может быт достаточно тяжелой процедурой для сервера, при этом некоторые страницы могут закешироваться неправильно и тп. Некоторые сервисы например в случае релиза большого апдейта обычно делают это ночью и закрывают сайт, показывая стандартное сообщение о том, что сервис будет доступен через несоклько часов. Но если вы не хотите прерывать работу можно сделать следующим образом. Для этого надо
- Поставить скрипт на другой (суб)домен, идеально на другом серваке
- Залить туда дам базы с главного домена
- Запустить апедйт на этом отдельном субдомене
- На нем отработают все тяжелые процедуры по базе, при этом основной сайт затронут не будет
- Перелить базу со вспомогательного домена на основной
- Провести апедйт на основном - он пройдет быстро тк база уже изменена, надо будет только скачать файлы.