Процесс обновления и возможные проблемы

В этой статье описано, как работает процесс обновления CS-Cart, какие проблемы могут возникнуть на каждом этапе, и чем они могут быть вызваны.

Предупреждение

Статья рассчитана на опытных пользователей со знаниями в области системного администрирования. Если вы не можете решить какую-то проблему самостоятельно, обратитесь в техподдержку CS-Cart.

Процесс обновления

Технически обновление CS-Cart происходит следующим образом:

  1. Отрабатывают так называемые валидаторы. Они проверяют определённые “проблемные области”, связанные с обновлением. Например:

    • Валидатор collisions проверяет, не были ли изменены обновляемые файлы ядра.
    • Валидатор permissions проверяет, правильно ли заданы права на папки и файлы.
    • Валидатор restore проверяет, можно ли создать резервную копию магазина.

    Валидаторы приведены нулевым шагом потому, что разные проверки проходят на разных этапах обновления.

  2. Скачивается и распаковывается пакет обновлений.

  3. Создаётся резервная копия файлов и базы данных магазина.

  4. Ссылка на восстановление магазина из резервной копии отправляется на электронную почту администратора.

    Примечание

    Администратор может пропустить создание резервной копии в двух случаях:

    • Если это обновление до Service Pack, и в обновлении нет миграций (эта возможность впервые появилась в версии 4.6.1).
    • Если включен режим разработки (но тогда стоит сделать резервную копию самостоятельно).
  5. Миграции вносят изменения в базу данных.

  6. Из пакета обновлений копируются файлы; удаляются файлы, убранные в новой версии CS-Cart.

  7. Устанавливаются языки из обновленных PO-файлов.

  8. Очищается кэш.

  9. В базе данных сохраняется информация об обновлении.

  10. На PHP-скрипты в корневой папке установки (admin.php, api.php, index.php) устанавливаются такие же права, которые были до обновления.

После этого обновление завершено.

Возможные проблемы при обновлении и их причины

Важно

Информация о многих перечисленных ниже проблемах попадает в лог (журнал) обновления — файл core_log.txt. Этот файл создаётся в директории с установленным CS-Cart в папке var/upgrade при попытке обновления.

0. Валидаторы возвращают ошибки

Ошибки, связанные с валидаторами, обычно появляются до начала обновления; есть исключение, но оно происходит уже после того, как магазин успешно обновился. Поэтому нет необходимости восстанавливать сайт из резервной копии — достаточно решить проблему.

Проверка «Restore» завершилась неудачно

Текст ошибки:

Проверка «Restore» завершилась неудачно

Валидатор restore проверяет, можно ли будет откатить обновление, то есть восстановить старую версию магазина из резервной копии. Если возникает такая ошибка, то причины могут быть следующие:

  • Неправильные права на папки и файлы.

  • Веб-сервер не даёт запустить скрипт восстановления из резервной копии. Этот скрипт создаётся с такими правами, которые указаны в DEFAULT_FILE_PERMISSIONS в файле config.local.php.

    Один из вариантов решения: изменить права в этом файле на такие, с которыми ваш сервер позволит запустить скрипт. Нужные права зависят от настроек сервера.

  • Проблемы с cURL:

    • cURL не установлен на сервере;

    • сURL возвращает пустое тело ответа;

    • в ответе на cURL-запрос приходят ошибки;

    • на сервере запрещено loopback-соединение; в результате возникает следующая ошибка:

      HTTP error: curl (56): Failure when receiving data from the peer
      
  • Отсутствует директория upgrades, или же в ней отсутствует файл source_restore.php. Если файла или директории нет, то их можно взять из установочного архива CS-Cart той версии, которая у вас сейчас установлена.

    Получить нужную версию можно в Help Desk: напишите в техподдержку и скажите, файл от какой версии вам нужен. Специалисты загрузят его вам в раздел File Area.

  • Обновление производится на тестовой копии установки на другом сервере с тем же доменом: в файл hosts на компьютере клиента добавлена запись с IP-адресом тестовой копии.

    Получается, что копия пытается связаться с живым магазином. Решить проблему можно двумя путями:

    • Внести аналогичные изменения в файл hosts на сервере с тестовой копией.
    • Использовать для тестовой копии другой, временный домен.

Пакет содержит миграции, которые не описаны в схеме

Текст ошибки:

Пакет содержит миграции, которые не описаны в схеме, или в схеме есть ссылки на отсутствующие файлы миграции

Ошибка может означать, что:

  • Не удалось скачать или распаковать пакет обновлений; нужно скачать его заново. Возможно, проблема вызвана тем, что на сервере не хватает свободного места.
  • Предыдущее обновление прошло неудачно (не применились миграции). В этом случае лучше всего восстановить предыдущую версию из резервной копии и обратиться в техподдержку CS-Cart.
  • Реальная версия не совпадает с указанной в файле config.php. Если проблема точно не связана с миграциями, то для решения достаточно изменить версию в config.php.

Проверка “0” завершилась неудачно

В журнал обновления записывается ошибка наподобие:

There was a problem creating the schema table: Invalid default value for 'end_time'

Проблема возникает в старых версиях, если в MySQL включен режим NO_ZERO_DATE. Ошибка исправлена в 4.4.х.

Обновление невозможно из-за ошибки при проверке целостности файлов

Текст ошибки:

Обновление невозможно из-за ошибки при проверке целостности файлов. Пожалуйста, обратитесь в службу технической поддержки.

Ошибка означает, что возникла проблема с целостностью файлов. Обратитесь в техподдержку CS-Cart.

Проверка «Backup» завершилась неудачно

Текст ошибки:

Проверка «Backup» завершилась неудачно

Ошибка означает, что не была создана резервная копия базы данных. Проблема может быть вызвана тем, что на сервере нет свободного места.

1. Не скачивается или не распаковывается пакет обновлений

Если пакет обновлений не скачивается, то причины обычно (но не всегда) записываются в журнал обновления. Вот возможные причины:

  • На сервере отключена директива allow_url_fopen (доступ к файлам по URL), поэтому не работает функция file_get_contents. Эта причина не попадает в журнал.

  • Не сервере не хватает свободного места. Эта причина не попадает в журнал.

  • В config.php отсутствует или указан неверный URL Центра обновлений. Должно быть:

    $config['updates_server'] = 'http://updates.cs-cart.com';
    
  • На странице Настройки → Общие введены такие настройки прокси-сервера, с которыми не удаётся скачать пакет обновлений.

  • Неправильные права на директорию, куда должны скачиваться файлы обновления (var/upgrades).

Если пакет обновлений не распаковывается, то причины могут быть следующими:

  • На сервере не включено расширение ZipArchive. Эта причина не попадает в журнал, но на странице Администрирование → Резервное копирование и восстановление выдаётся сообщение, если это расширение не включено.
  • На сервере не хватает свободного места. Эта причина не попадает в журнал.

2. Не создаётся резервная копия

Если не создаётся резервная копия магазина, то это может быть вызвано несколькими причинами:

  • На сервере установлено слишком маленькое время на выполнение операций. Причина может быть в маленьком времени выполнения PHP-скрипта (max_execution time; для него рекомендуем устанавливать значение как минимум 3600). Также проблема может быть связана с настройками FastCGI и MySQL.

    Подсказка

    Чтобы понять, не остановилось ли обновление, посмотрите на вкладку браузера. Если обновление работает, то на вкладке браузера отображается анимация загрузки страницы.

  • Есть файлы с названиями на кириллице (чаще всего, это названия стилей) — в этом случае отобразится детальное сообщение об ошибке. Чтобы решить проблему, переименуйте файлы и повторно запустите обновление.

    Чтобы переименовать стиль, откройте его в Редакторе тем и дублируйте, указав нужное название. После этого выберите стиль-дубликат, а оригинал удалите.

  • В базе данных есть нестандартные таблицы (например, от сторонних модулей) с недопустимыми символами в названии — в этом случае сообщения об ошибке не будет. Проблема решается переименованием таблиц согласно правилам MySQL: в названиях используйте только латинские буквы, цифры, нижнее подчёркивание и знак $.

  • Ошибка Проверка «Backup» завершилась неудачно: на сервере не хватает свободного места. Эта причина не попадает в журнал.

3. Не отправляется письмо администратору

Если не удаётся отправить письмо со ссылкой на восстановление магазина из резервной копии, то обновление не начинается. Решение проблем с отправкой почты описано в отдельной статье. Также проблема может возникнуть, если на странице Настройки → Компания не задан email администратора сайта. В любом случае, в журнале обновления будет запись о соответствующей ошибке.

4. Проблемы с миграциями

Такие проблемы могут быть вызваны нестандартной структурой базы данных у обновляемого магазина или ошибкой в самой миграции. В результате возникают SQL-ошибки, которые записываются в журнал обновления.

В случае проблем с миграциями рекомендуем восстановить магазин из резервной копии и обратиться в техподдержку CS-Cart.

5. Проблемы с копированием/удалением файлов

На этом этапе проблемы могут возникнуть, если на сервере установлено слишком маленькое время на выполнение операций. Причина может быть в маленьком времени выполнения PHP-скрипта (max_execution time; для него рекомендуем устанавливать значение как минимум 3600). Также проблема может быть связана с настройками FastCGI и MySQL.

Подсказка

Чтобы понять, не остановилось ли обновление, посмотрите на вкладку браузера. Если обновление работает, то на вкладке браузера отображается анимация загрузки страницы.

Если обновление прерывается на этом этапе, рекомендуем восстановить магазин из резервной копии.

6. Установка языков

На этом этапе проблемы могут возникнуть, если на сервере установлено слишком маленькое время на выполнение операций. Причина может быть в маленьком времени выполнения PHP-скрипта (max_execution time; для него рекомендуем устанавливать значение как минимум 3600). Также проблема может быть связана с настройками FastCGI и MySQL.

Подсказка

Чтобы понять, не остановилось ли обновление, посмотрите на вкладку браузера. Если обновление работает, то на вкладке браузера отображается анимация загрузки страницы.

Если обновление прерывается на этом этапе, рекомендуем восстановить магазин из резервной копии.

7. Очистка кэша

На этом этапе проблемы могут возникнуть, если на сервере установлено слишком маленькое время на выполнение операций. Причина может быть в маленьком времени выполнения PHP-скрипта (max_execution time; для него рекомендуем устанавливать значение как минимум 3600). Также проблема может быть связана с настройками FastCGI и MySQL.

Подсказка

Чтобы понять, не остановилось ли обновление, посмотрите на вкладку браузера. Если обновление работает, то на вкладке браузера отображается анимация загрузки страницы.

На этом этапе магазин уже обновлён до новой версии. Если нужно, кэш можно очистить самостоятельно.

8. Сохранение информации об обновлении

При сохранении информации об обновлении в базу данных проблема может возникнуть по следующим причинам:

  • На сервере установлено слишком маленькое время на выполнение операций. Причина может быть в маленьком времени выполнения PHP-скрипта (max_execution time; для него рекомендуем устанавливать значение как минимум 3600). Также проблема может быть связана с настройками FastCGI и MySQL.

    Подсказка

    Чтобы понять, не остановилось ли обновление, посмотрите на вкладку браузера. Если обновление работает, то на вкладке браузера отображается анимация загрузки страницы.

  • Нет информации о пакете обновления. Само обновление завершается успешно, но появляется сообщение:

    Проверка «0» завершилась неудачно
    

    При этом в журнал обновления записывается SQL-ошибка наподобие:

    Caught an exception: Tygh\Exceptions\DatabaseException: Column 'type' cannot be null <b>(1048)</b><p>INSERT INTO cscart_installed_upgrades (`type`, `name`, `timestamp`, `description`, `conflicts`) VALUES (NULL, NULL, 1504536222, NULL, 'a:0:{}')</p> in /path/to/store/app/Tygh/Database/Connection.php:1118
    

    В этом случае откройте страницу Администрирование → Центр обновлений, нажмите на кнопку с изображением шестерёнки и выберите Проверить доступные обновления. Иначе уже установленное обновление может отображаться как доступное.

9. Проблема при изменении прав на PHP-скрипты

Иногда при обновлении не удаётся выполнить команду chmod и установить те права на PHP-скрипты в корневой директории CS-Cart, которые были до обновления. Обычно проблема проявляется только записью в журнале обновлений: само обновление при этом завершается успешно, а магазин работает. Но если сразу после обновления возникают какие-то проблемы, то стоит проверить права и владельца файлов admin.php (у вас он должен называться иначе), api.php и index.php.

Возможные проблемы после обновления

Сообщение “Магазин закрыт на обслуживание”

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

  • Проверьте самые важные страницы, например, страницы товаров, контактную информацию, оформление заказов и пр.
  • Оформите тестовый заказ от лица тестового покупателя.
  • Проверьте данные в панели администратора (информацию о товарах, заказах, и пр.).

После этого откройте магазин для покупателей.

Загружен неверный пакет обновлений

Центр обновлений получает пакеты в зависимости от типа лицензии. Если у вас установлена CS-Cart Русская версия, а номер лицензии вбит от международной версии, то вы получите пакет обновлений от международной версии (и наоборот). В русской версии не обновятся русские модули, а в международной версии будут ошибки в миграциях (и появятся лишние файлы). В этом случае лучше восстановить магазин из резервной копии.