Если возникли проблемы с обновлением или инсталляцией

Общие обсуждения публичной версии проекта "Сверхновая"
Support forum for public version

Модератор: Gorlum

Правила форума
Внимание! Этот форум - только для обсуждения вопросов и проблем на сторонних серверах, использующих движок Сверхновой!

Для обсуждения оригинальных серверов СН существуют соответствующие форумы: для багрепортов, для обсуждение движка на офф-серверах.

Общие багрепорты и проблемы на публичных серверах обсуждаются в соответствующем форуме.

Для обсуждения работа модулей и багрепротов по их работе существует свой форум
Закрыто
Gorlum
Император Вселенной
Сообщения: 7196
Зарегистрирован: 13 июн 2009, 15:06
Контактная информация:

Если возникли проблемы с обновлением или инсталляцией

Сообщение Gorlum » 26 фев 2012, 15:57

Проверьте версию PHP
ВНИМАНИЕ! PHP версии 5.3.1 содержит баг, который препятствует корректной работе функции-оболочки, если в параметрах оригинальной функции содержится параметр, передаваемый по ссылке. Поэтому начиная с 33a12 СверхНовая не может работать под PHP этой версии! Обновите PHP на более поздний, или сделайте откат до более ранней версии, или используйте предыдущюю версию СН!
Ссылка для чтения: https://bugs.php.net/bug.php?id=50394

"Белый экран"
Очень часты жалобы следующего вида: "Я скачал и поставил движок, а при загрузке страницы в браузере только белый экран!". Данная неисправность в большинстве случаев означает, что есть какая-то проблема, но в настройках PHP отключен вывод ошибок.
Для диагностики такого рода проблем необходимо включить вывод ошибок. Сделать это можно в настройках PHP, в .htaccess или в движке.
Что бы включить вывод ошибок в движке, нужно в файле /includes/init.php второй строкой вписать (или разкомментировать строку):

Код: Выделить всё

define('BE_DEBUG', true);
Если используете Альфа-версии релизов...
...то перед сообщением об ошибке нужно:
  1. Почитать новости
  2. Обновится до последней существующей версии - возможно, в ней глюк уже исправлен, потому что я публикую чейнджлог пачками и могу просто не опубликовать еще изменения
Fatal error: Cannot redeclare...
Файлы движка и функции в нем могут менять местоположение от версии к версии. Поскольку движок в состоянии Альфа - это нормально.
Движок расчитан на обновление через репозитории GIT/SVN, при которых все перемещения файлов/функций отрабатываются автоматически. Однако при простом копировании старой версии движка поверх новой может возникнуть следующая ошибка:

Код: Выделить всё

Fatal error: Cannot redeclare (...) in (...) on line (...)
где (...) - названия функций, файлов, номер строки

В этом случае необходимо ПОЛНОСТЬЮ удалить старую версию движка (сохранив файл config.php), залить новую версию движка и подсунуть её конфигурационный файл.

Те, кто разбирается немного в PHP (а таким должен быть любой, кто пользуется текущими версиями движка) может просто удалить лишние файлы, определив их по сообщению об ошибке.

Ошибки с CONTRAINTs
После включения отладочного режима движок может выдать уведомление об ошибках в CONTRAINTs. Обычно это происходит при интенсивном использовании альфа-версий релизов при апгрейде с пропуском нескольких версий. Иногда такое может произойти и при апгрейде альфа/бета версии на релиз.
Ниже приводится общий алгоритм решения такого типа проблем - если не вмочь ждать следующей альфы или обновления релиза

Приведу алгоритм решение проблемы с констраинтами на примере таблицы `users` и поля `ally_tag`

Нам нужно добавить вот такой constraint:

Код: Выделить всё

ADD CONSTRAINT `FK_users_ally_tag` FOREIGN KEY (`ally_tag`) REFERENCES `{$config->db_prefix}alliance` (`ally_tag`) ON DELETE SET NULL ON UPDATE CASCADE
Он связывает поле ally_tag таблицы users (подчиненная) с полем ally_tag таблицы alliance (главная). Когда поле ally_tag изменяется в таблице alliance, то связанное поле автоматически изменяется в таблице users. Если запись удаляется из таблицы users - поле ally_tag в соответствующей записи таблицы users обнуляется.

Что бы можно было сделать такую связь, нужна логическая целостность обоих таблиц. Это означает, что:
  1. Типы и кодировка связываемых полей должны совпадать.
  2. В подчиненной таблице в свойствах поля должно стоять DEFAULT NULL
  3. Для всех связываемых полей должны существовать индексы во всех используемых таблицах
  4. На момент связывания в подчиненной таблице НЕ ДОЛЖНО быть таких значений в связываемом поле, которых нет в главной таблице.
В нашем случае (самый сложный) нужно:
  1. во-первых обновить все значения ally_tag до текущих:

    Код: Выделить всё

    doquery("UPDATE {{users}} AS u LEFT JOIN {{alliance}} AS a ON a.id = u.ally_id SET u.ally_tag = a.ally_tag;");
  2. во-вторых - для тех записей, для которых Альянсы не существуют, установить соответствующее поле в NULL

    Код: Выделить всё

    doquery("UPDATE {{users}} AS u LEFT JOIN {{alliance}} AS a ON a.id = u.ally_id SET u.ally_id = NULL, u.ally_tag = NULL WHERE a.id is NULL;");
Если бы в constraint стояло бы ON DELETE CASCADE, а не ON DELETE SET NULL, то вместо второго шага нужно было бы просто удалить из подчиненной таблицы все записи, для которых нет
соответствия в главной таблице. На примере constraint для таблицы shortcut:

Код: Выделить всё

ADD CONSTRAINT `FK_shortcut_planet_id` FOREIGN KEY (`shortcut_planet_id`) REFERENCES `{$config->db_prefix}planets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
соответствующий запрос:

Код: Выделить всё

doquery('DELETE FROM {{shortcut}} WHERE shortcut_planet_id NOT IN (SELECT id FROM {{planets}});');
??????
PROFIT!

Собственно, апдейтер сам делает все нужные изменения, НО ТОЛЬКО если ранее все апдейты проходили нормально! Если, например, ранее сбился constraint на ally_id, то апдейтер НЕ СМОЖЕТ нормально отработать constraint на ally_tag.

Мануал для курения:
http://dev.mysql.com/doc/refman/5.5/en/ ... aints.html

И совсем продвинутый мануал:
http://dev.mysql.com/doc/refman/5.5/en/constraints.html

Если используете релиз
Невозможно предсказать заранее все возможные комбинации настроек PHP, MySQL и веб-сервера. СН ориентируется на "установки по умолчанию". Поэтому в отдельных случаях возможны сбои в процедуре обновления.
Алгоритм автоматического обновления рассчитан на однократный запуск. Однако в случае некоторых конфигураций, в процессе обновления происходят ошибки. Некоторые из них - критичны, а некоторые можно исправить повторным запуском процедуры (с или без редактирования БД).
Запустить процедуру обновления повторно можно используя пункт "Форсировать обновление" меню "Утилиты" на странице Администратора.
Прошу обратить внимание! Использование форсированного обновления может привести к порче БД (в случае, если само обновление закончилось ранее успешно)! Поэтому ОБЯЗАТЕЛЬНО сделайте копию движка и БД перед форсированным обновлением (даже если вы делали копию перед апгрейдом)!
Форсированное обновление нужно использовать только в том случае, если стандартная процедура обновления прошла неуспешно! Если и это не помогло - следует перейти к разделу "Диагностика неисправностей движка"

Диагностика неисправностей движка
Самую свежую и актуальную версию движка (с самыми свежими и актуальными багами) можно скачать по этой ссылке:
https://github.com/supernova-ws/SuperNo ... ives/trunk
Клик на «Download .zip» и загрузит архив транка. При чем именно надо перейти по ссылке выше и там щелкнуть кнопку. Переход по прямой ссылке на загружаемый файл – не сработает.
На название файла внимание обращать не нужно - будет загружена самая свежая версия из ветки trunk.

!!!ВНИМАНИЕ!!! Диагностику нужно проводить на отдельной БД и отдельной копии движка! НИ В КОЕМ СЛУЧАЕ НЕЛЬЗЯ ПРОВОДИТЬ ДИАГНОСТИКУ НА ЖИВОМ СЕРВЕРЕ!!!

Стандартная последовательность действий при диагностике такая:
  1. Установить в пустую базу данных чистый дамп БД из архива.
    Проблемы на этом этапе говорят о следующем:
    1. Наиболее вероятно - ошибки в настройке сервера MySQL
    2. Ошибки в дампе БД. Возможно, вы попали в момент обновления дампа. "Момент" тут понятие условное - он может растянутся на несколько дней или даже недель
  2. Поставить на чистый сервер и чистую БД, полученную на прошлом шаге, движок из архива. Попытаться запустить.
    Проблемы на этом этапе говорят о следующем:
    1. Ошибки в настройках движка. Проверить файл /config.php
    2. Ошибки в настройках HTTP-сервера (особенно если движок запускается в первый раз)
    3. Ошибки в автоапдейтере
    4. Движок находится в процессе написания, а вы попали на "момент" коммита
  3. Заменить чистую базу дампом своей рабочей базы (не забываем СНОВА если нужно изменить конфигурацию – префиксы таблиц там, логины/пароли и прочее).
    Проблемы на этом этапе говорят о следующем:
    1. Ошибки в настройках движка. Проверить файл /config.php
    2. Ошибки в автоапдейтере
    3. Ошибки в самой БД. Тут либо разбираться самим, либо оплачивать мою работу
  4. Если проблем нет – значит что-то конкретно не так на живом сервере. Тут надо уже разбираться подробнее - либо самостоятельно, либо оплатить мою работу
Перед КАЖДЫМ этапом ОБЯЗАТЕЛЬНО нужно перезапустить веб-сервер и MySQL – иначе могут использоваться старые настройки от предыдущей версии.

Только верное и аккуратное следование процедуре диагностики поможет эффективно выявить проблемы в работе СН на каждом отдельно взятом сервере.
ВНИМАНИЕ! Администрация в личную переписку не вступает, рукописи не возвращает и не рецензирует!
* Если у меня слишком хорошее настроение - я хожу почитать чат *

Gorlum
Император Вселенной
Сообщения: 7196
Зарегистрирован: 13 июн 2009, 15:06
Контактная информация:

Magic Quotes

Сообщение Gorlum » 08 мар 2012, 15:07

Если в отправляемых сообщениях символы \ (обратный слэш) и " (двойная кавычка) заменяются на \\ и \", а символ ' (одинарная кавычка) - на символы \' или '', это говорит о том, что на сервере в настройках PHP включен механизм Magic Quotes. Для нормальной работы движка необходимо отключить этот механизм. Сделать это можно несколькими путями (даются в порядке уменьшения эффективности):
1. Напрямую в файле конфигурации сервера PHP "php.ini":

Код: Выделить всё

     magic_quotes_gpc = Off
     magic_quotes_runtime = Off
     magic_quotes_sybase = Off
2. Если нет доступа к основному файлу конфигурации, то многие хостеры поддерживают локальное изменение настроек через ".htaccess". Добавить указанный файл в корневой каталог движка и прописать в нем строки:

Код: Выделить всё

     php_flag magic_quotes_gpc Off
     php_flag magic_quotes_runtime Off
     php_flag magic_quotes_sybase Off
3. Некоторые хостеры не поддерживают ни один из первых двух пунктах, но поддерживают локальные "php.ini". В этом случае нужно создать в корневом каталоге движка файл "php.ini" и добавить в него строки:

Код: Выделить всё

     magic_quotes_gpc = Off
     magic_quotes_runtime = Off
     magic_quotes_sybase = Off
Если хостер не поддерживает ни один из вышеуказанных методов, то движок с версии 34a0 по мере сил постарается скомпенсировать "работу" Magic Quotes. Однако корректность работы движка НЕ ГАРАНТИРУЕТСЯ!
Пользователи более ранних версий могут самостоятельно добавить механизм компенсации. Для этого в файл /includes/init.php необходимо в самом начале вставить такой код:

Код: Выделить всё

if(ini_get('magic_quotes_sybase'))
{
  die('SN is incompatible with \'magic_quotes_sybase\' turned on. Disable it in php.ini or .htaccess...');
}

if(@get_magic_quotes_gpc())
{
  function sn_sys_unmagic_quotes(&$value, $key)
  {
    $value = stripslashes($value);
  }
  $gpcr = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
  array_walk_recursive($gpcr, 'sn_sys_unmagic_quotes');
}
ВНИМАНИЕ! Администрация в личную переписку не вступает, рукописи не возвращает и не рецензирует!
* Если у меня слишком хорошее настроение - я хожу почитать чат *

Закрыто

Вернуться в «[ru/en] Публичная версия/Public releases»