Tech notes

Daily notes about my IT activities.

2011-07-10

SMF 1.1 => SMF 2.0

by hackprime

Небольшое руководство о том, как обновить Simple Machune Forum c версии 1.1 (или 1.0) до 2.0.

На сервере имеем: Linux CentOS, nginx 0.98, MySQL 5.1.53, PHP 5.2.

Поехали.

1) Делаем бэкап папки с форумам.

2) Делаем бэкап базы данных.

3) Очищаем таблицы с поисковым кэшем.

mysql> USE %database_with_smf_name%
mysql> TRUNCATE TABLE smf_log_search_messages;
mysql> TRUNCATE TABLE smf_log_search_results;
mysql> TRUNCATE TABLE smf_log_search_subjects;
mysql> TRUNCATE TABLE smf_log_search_topics;

Примечание: чтобы не возникло ошибки при обновлении, создайте в каждой из таблиц по одной пустой записи</li>

4) Теперь, скачиваем с оф.сайта пакет обновлений SMF 2.0 (Lagre upgrade). Помимо этого стоит скачать нужные языковые паки (русский). Распаковываем и перемешиваем. Готовую «смесь» загружаем на сервер в директорию с форумом (с перезаписью существующих файлов).

5) Запускаем в браузере скрипт http://domain.com/path_to_smf/upgrade.php, и, следуя указаниям, обновляем форум.

Возможные ошибки:

1) После обновления, при попытки зайти на форум, появится надпись «Невозможно загрузить ‘main’ шаблон.». Это означает, что по какой-то причине дирректория с темой форума по умолчанию пропала из /Themes/, просто верните её на место (Мы же сделали бэкапы, правильно?) и всё заработает.

2) Весь кириллистический текст, полученный из базы данных, будет похож на квадратики или на знаки вопросов в тёмных ромбиках. Это означает, что где-то ломается исходная кодировка.

Сначала идём в базу данных, в таблицу smf_settings, и ищем там строку, у которой поле variable равняется ‘global_character_set’. Если его там нет, то вставляем строку с таким параметром, где в поле value записываем ‘UTF-8’ (Мы же всегда используем UTF-8, правда?).

Теперь проверяем форум. Если русские буквы в названии тем видны — обновление завершено, поздравляю. Если нет… используем brute force!

Открываем файл /Sources/Subs-Db-mysql.php. Находим функцию smf_db_initiate и в самый её конец, перед оператором return, вставляем одну строку:

@mysql_query("SET NAMES UTF8", $connection);

Сохраняем. Проверяем форум — всё работает.

Источники:

  1. Официальное руководство на английском языке
  2. Обновление smf 1.0.*, smf 1.1.* -SMF 2.0 — Тема на русскоязычном форуме SMF
  3. Upgrade SMF 1.1.8 to SMF 2.0 RC3