User Tools

Site Tools


Translations of this page:
ru:updates

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

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

<?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 варианта:

  1. добавить в update.sh строки типа cp ../cgi/index.php ../../index.php
  2. или сразу при инстале не копировать индекс, а сделать симлинк на соотв каталог.

Как откатить апдейт

Единственный вариант - если у вас есть бекап с нужной версии.

Надо поставить скрипт этой версии и залить бекап мускла той же версии.

Просто так залить в скрипт версии например 45 бекап мускла из версии 44 - нельзя.

Как провести апдейт на сайте с очень большой базой

Апдейт может быт достаточно тяжелой процедурой для сервера, при этом некоторые страницы могут закешироваться неправильно и тп. Некоторые сервисы например в случае релиза большого апдейта обычно делают это ночью и закрывают сайт, показывая стандартное сообщение о том, что сервис будет доступен через несоклько часов. Но если вы не хотите прерывать работу можно сделать следующим образом. Для этого надо

  1. Поставить скрипт на другой (суб)домен, идеально на другом серваке
  2. Залить туда дам базы с главного домена
  3. Запустить апедйт на этом отдельном субдомене
  4. На нем отработают все тяжелые процедуры по базе, при этом основной сайт затронут не будет
  5. Перелить базу со вспомогательного домена на основной
  6. Провести апедйт на основном - он пройдет быстро тк база уже изменена, надо будет только скачать файлы.
ru/updates.txt · Last modified: 2024/03/08 13:27 by admin