- en
- ru
This is an old revision of the document!
Table of Contents
Updates
Апдейты помогают нам и Вам содержать Вашу копию в актуальном состоянии. С апдейтами в скрипте добавляются новые функции и тд. В пределах одного апдейта бывают разные билды с небольшими поправками. Апдейт и билд написан в конце каждой страницы.
Как провести апдейт
cd your_path_to/scj/admin/ php update.php (опционально номер апдейта)
TCMS Updates
Апдейты версии 1
- Базовая строка для проведения всех апдейтов. Она обновит ваш скрипт до послденией версии
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 - нельзя.
Как провести апдейт на сайте с очень большой базой
Апдейт может быт достаточно тяжелой процедурой для сервера, при этом некоторые страницы могут закешироваться неправильно и тп. Некоторые сервисы например в случае релиза большого апдейта обычно делают это ночью и закрывают сайт, показывая стандартное сообщение о том, что сервис будет доступен через несоклько часов. Но если вы не хотите прерывать работу можно сделать следующим образом. Для этого надо
- Поставить скрипт на другой (суб)домен, идеально на другом серваке
- Залить туда дам базы с главного домена
- Запустить апедйт на этом отдельном субдомене
- На нем отработают все тяжелые процедуры по базе, при этом основной сайт затронут не будет
- Перелить базу со вспомогательного домена на основной
- Провести апедйт на основном - он пройдет быстро тк база уже изменена, надо будет только скачать файлы.
Как провести апдейт на очень старом сайте
Если сайт старый, то есть вероятность что много апдейтов подряд могут не пройти. Тогда имеет смысл проводить их по одному например
php update.php 47
убедиться что не ошибок. Если есть исправить и запустить туже строку снова. и так далее меняя только цифру апдейта.
PS сделать бекап это всегда хорошее решение.
