Обновление X-Cart 5
page last edited on 25 October 2017
Содержание
- Обновление на новую версию (апгрейд) и обновление текущей версии
- Волны апгрейда
- Доступность обновления для разных версий
- Специальные средства апгрейда (хуки)
- До апгрейда: сохранение бэкапа магазина
- Процесс апгрейда
- Апгрейд вручную
Обновление на новую версию (апгрейд) и обновление текущей версии
Обозначение версии X-Cart включает 4 числовых элемента (статья на английском языке): два первых числа обозначают мажорную версию, третье число обозначает минорную версию, четвертое - версию билда (версии, в которой из нового - только исправленные баги). В соответствие с таким обозначением версий, процесс апгрейда имеет два вида:
-
мажорный апгрейд - апгрейд, в результате которого изменяются первые три числа в версии (номера мажорной и минорной версий), например, апгрейд с 5.0.13 на 5.1.3, с 5.2.16 на 5.2.20 или с 5.3.1.6 на 5.3.2.0.
-
минорный апгрейд - апгрейд, в результате которого изменяется четвертое числе в версии (версия билда), например, обновление с 5.3.1.3 на 5.3.1.6.
Тип апгрейда отражает существенность привносимых им изменений. Мажорный апгрейд дает новую функциональность и решает баги предыдущих версий. Минорный апгрейд только решает баги предыдущих версий. Новая функциональность обеспечивается мажорным апгрейдом за счет изменений ядра, то есть изменения интерфейса классов и подписей методов. Такие изменения не входят в минорный апгрейд. Как следствие, после минорного апгрейда не требуется обновления модулей, а после мажорного - модули требуют аналогичного апгрейда, чтобы быть совместимыми с новой версией ядра.
Повышение 4-го числа 5.3.0.3 - 5.3.0.5 |
Повышение 3-го числа 5.3.0.3 - 5.3.1.0 |
Повышение 2-го числа 5.3.0.3 - 5.4.0.0 |
---|---|---|
Только багфиксы | Багфиксы Новая функциональность Незначительные изменения API |
Багфиксы Новая функциональность Значительные изменения API |
В свободном доступе | Бесплатно при наличии подписки на апгрейд |
Бесплатно при наличии подписки на апгрейд |
Если для магазина одновременно доступны мажорный и минорный апгрейды, администратор может выбрать, какой из них осуществить. В результате минорного апгрейда, магазин получит все багфиксы новейшего багфиксного релиза внутри ветки, в которую входит версия магазина. В результате мажорного апгрейда, магазин будет обновлен до новейшей версии и получит все новые функции и багфиксы, доступные для данного типа лицензии X-Cart.
Волны апгрейда
Новая версия X-Cart становится доступна существующим пользователям в два этапа. Такой подход обеспечивает более тщательное тестирование новой версии.
Первый этап - так называемая, девелоперская волна, когда сразу после анонса новой версии доступ к ней получают разработчики и первопроходцы X-Cart. На этом этапе сторонние разработчики модулей могут адаптировать свои модули к новому ядру X-Cart, а технически подкованные пользователи, могут попробовать сделать апгрейд.
Второй этап - клиентская волна, доступ к новой версии выдается всем владельцам магазинов в через 2-7 дней после официального релиза.
Девелоперская волна, конечно, дает новую версию раньше всех, но апгрейд рекомендуется только тем пользователям, которые уверены, что смогут справиться с возможными проблемами во время обновления.
По умолчанию, все новые установки X-Cart настроены обновляться во время второй волны. Но если вам нужен доступ к новым версиям во время девелоперской волны, уровень доступа к обновлениям нужно изменить на Девелопер.
Доступность обновления для разных версий
Мажорный апгрейд, изменяющий второе число в номере версии, можно сделать только с последней версии ветки. Другими словами, если ветка 5.0.x состоит из версий 5.0.10, 5.0.11, 5.0.12, 5.0.13 и 5.0.14, то единственная версия, с которой можно перейти на 5.1 - это 5.0.14. на мажорные апгрейды, которые изменяют третье число в номере версии, данное правило не распространяется, то есть магазин версии 5.0.10 можно обновить до версии 5.0.14 в один шаг. Апгрейд магазина с версии 5.0.10 до версии 5.1.0 включает два шага - апгрейд с 5.0.10 до 5.0.14 и апгрейд 5.0.14 до 5.1.0.
Специальные средства апгрейда (хуки)
Суть любого апгрейда/обновления - всего лишь переписать текущие файлы ядра/модуля. Но бывает, что X-Cart должен выполнить синхронизацию или коммуникативную работу. Такая работа выполняется специальными средствами апгрейда (хуками). Их делят на три типа:
- До апгрейда: до перезаписи файлов, работают с кодом старого ядра.
- После апгрейда: после перезаписи файлов, но до перестройки кеша. Назначение - подготовить магазин к перестройке кеша. Работают с кодом старого ядра.
- После восстановления: сразу после самой первой перестройки кеша. Работают с кодом нового ядра.
Хуки ядра находятся в файле <X-Cart 5>/upgrade/
. Например, хуки для версии 5.1.3 можно найти в папке <X-Cart 5>/upgrade/5.1/3/
. Здесь вы найдете три типа файлов:
- pre_upgrade.php содержит предапгрейдные хуки;
- post_upgrade.php содержит постапгрейдные хуки;
- post_rebuild.php содержит поствосстановительные хуки.
Апгрейдные хуки действуют и в модулях, когда модулю нужно синхронизировать данные между своими версиями. Апгрейдные хуки модулей находятся в папках <X-Cart 5>/classes/Module/<DEV-ID>/<MODULE-ID>/upgrade/
, например, <X-Cart 5>/classes/XLite/Module/XC/ProductComparison/upgrade/
.
До апгрейда: сохранение бэкапа магазина
Апгрейд магазина - это сложный процесс, требующий тщательной подготовки. Как минимум, необходимо сделать резервную копию магазина (файлов и базы данных).
Также, лучше сделать тестовую копию магазина и устанавливать апгрейд и обновления на эту копию. Только если апгрейд устанавливается без проблем и тестовый магазин продолжает нормально функционировать, можно установить апгрейд и на живой магазин.
Информацию о создании тестовой копии магазина и восстановлении резервной копии можно найти в статье Перенос X-Cart на другое местоположение.
Процесс апгрейда
Каждый магазин X-Cart один раз в день проверяет наличие обновлений в маркетплейсе. Ответ от маркета кешируется на сутки. Чтобы удалить эти закешированные данные пройдите по ссылке admin.php?target=addons_list_marketplace&action=clear_cache
.
Если появились обновления, в зоне администратора вы увидите надпись Доступны обновления:
Также, уведомление об бновлениях появится на иконке новостей (колокольчик):
Цвет надписи Доступны обновления может быть оранжевым или зеленым. Оранжевый цвет сообщает о выходе версии с новыми функциями.
Зеленый текст сигнализирует о выходе багфиксной версии или версии, в которой есть и новые функции, и новые багфиксы.
Для просмотра доступных обновлений нажмите на ссылку Доступны обновления, откроется страница Обновления для вашей версии:
Вкладки на странице:
- Вкладка Только исправления показывает багфиксные релизы ядра и модулей:
- Вкладка Исправления и улучшения показывает новые версии ядра и модулей с новыми функциями:
Ссылка Дополнительные опции позволяет устанавливать обновления выборочно:
Следуйте данным инструкциям по апгрейду магазина:
-
Создайте резервную копию магазина (файлов и базы данных). Бэкап необходим на случай сбоя обновления. Не пропускайте данный шаг, т.к. это может стоить вам часов переговоров с хостинг провайдером и восстановления магазина из серверного бэкапа.
Для создания резервной копии необходим модуль Backup Master. Если модуль не установлен, установите и активируйте его.
-
В зоне администратора магазина пройдите по ссылке Доступны обновления на страницу Обновления для вашей версии.
-
Проверьте доступные обновления и выберите те, которые хотите установить. Если доступны оба вида апгрейда - мажорный и минорный - перейдите на соответствующую вкладку:
- Чтобы установить только багфиксы, перейдите на вкладку Только исправления.
- Чтобы установить багфиксы и обновить функциональность, перейдите на вкладку Исправления и улучшения.
Если вы не желаете делать полный апгрейд магазина с установкой всех доступных обновлений, перейдите по ссылке Дополнительные опции и выберите только те обновления, которые нужно установить.
Обратите внимание, что после неполного обновления возможны сбои в работе магазина. Неполный апгрейд рекомендуется делать в крайних случаях, и только если вы уверены, что сможете справиться с возможными последствиями.
-
Выбрав обновления, в конце списка нажмите Установить обновления.
-
Откроется страница, на которой нужно будет подтвердить начало обновления. Здесь вы увидите список компонентов для обновления, их текущую и целевую версии:
Если все верно, нажмите Продолжить для запуска обновления.
Обновления доступны только для магазинов с активированной лицензией. Если у вас тестовый магазин и никакая лицензия (бесплатная или платная) для него не активирована, вы не сможете пройти дальше этого шага, вы увидите предупреждение о лицензионной проблеме:
В этом случае, нужно, по крайней мере, активировать бесплатную лицензию или купить и активировать платную. После активации лицензии на странице обновления появится кнопка Продолжить.
-
Как только вы нажмете Продолжить, будут скачаны обновления ядра и модулей:
Скачанные обновления будут распакованы:
и проверены на целостность:
Важно: если этот шаг не выполнен по причине плохого Интернет-соединения, измените значение
REQUEST_LONG_TTL
в скрипте<X-Cart 5>/var/run/classes/XLite/Core/Marketplace.php
. -
На странице появится список загруженных обновлений.
Также здесь нужно подтвердить создание резервной копии магазина:
На этом шаге возможны несколько предупреждений об ошибках:
- Если какие-то из установленных модулей содержат апгрейдные хуки, и эти модули отключены, вам будет предложено удалить эти модули. Также, вы найдете ссылку на список отключенных модулей на случай, если вы решите не удалять, а активировать модуль.
- Если в магазине установлены модули, которых нет в Маркетплейсе (т.е. модули были загружены вручную), и апгрейд изменяет 3 и 4 числа в номере версии, такие модули нужно будет отключить, хоть это и не обязательное требование. Если апгрейд является мажорным и изменяет 1 и 2 числа в номере версии, то вы увидите предупреждение, что такие модули будут отключены автоматически.
- Если вы работаете с пробным 30-дневным магазином, в котором активированы платные модули на период ознакомления с софтом, при обновлении вам будет предложено удалить такие модули или активировать платную лицензию X-Cart.
- Если в магазине изменены какие-то файлы, вы увидите такое предупреждение:
- Во время апгрейда можно перезаписать измененные файлы их стандартныи вресиями или оставить модифицированные файлы как есть. При этом нужно понимать, что обновление модифицированного файла может привести к повреждению всего магазина.
- Для запуска апгрейда нажмите кнопку Установить обновления. Кнопка доступна только после подтверждения создания бэкапа магазина.
Начинается обновление магазина:
- Запускаются предапгрейдные хуки. Если апгрейд с 5.0.14 на 5.1.3, то апгрейдные хуки - 5.1.0, 5.1.1, 5.1.2, 5.1.3 - запускаются на этом шаге. Также, запускаются апгрейдные хуки модулей;
- Происходит перезаписывание файлов: добавляются новые файлы, старые - переписываются, файлы, которых нет в новой версии, удаляются;
- Запускаются постапгрейдные хуки. Процесс такой же, как при запуске предапгрейдных хуков;
- Перестройка кеша;
- Запускаются поствосстановительные хуки. Процесс такой же, как при запуске преапгрейдных и постапгрейдных хуков;
- Происходит обновление языковых переменных. Скрипт берет все install.yaml файлы модулей и файл ядра yaml с языковыми переменными (<X-Cart 5>/sql/install.yaml
), и помещает языковые переменные этих файлов в базу данных.
- Далее происходит развертывание:
- и установка обновлений:
-
По завершении установки, открывается страница с надписью Обновления для вашей версии. Не закрывайте эту страницу! и с вариантами восстановления магазина на случай проблем во время обновления. Если в магазине что-то не работает, можно определить, что не так, с помощью ссылок полного и частичного восстановления, или востановить прежнюю версию магазина из бэкапа.
На этой странице вы найдёте список обновленных компонентов и ссылку на лог апгрейда:
-
Если на странице появились замечания по апгрейду, обязательно следуйте предложенным ниструкциям.
Апгрейд вручную
Если во время автоматического апгрейда что-то пошло не так, апгрейд можно продолжить вручную.
Прежде всего, нужно установить, на каком шаге превался апгрейд. В самом конце файла <X-Cart 5>/var/log/upgrade.log
вы можете посмотреть, какие хуки запускались, и какие файлы были переписаны. Если не все поствосстановительные хуки были запущены, значит, апгрейд прервался на 5 шаге. Если не все файлы были переписаны, значит, апгрейд остановился на 2 шаге. Когда проблемный шаг найден, переделайте его и все последующие шаги вручную.
- Как получить новые файлы. Прежде всего, проверьте папку
<X-Cart 5>/var/tmp
, все новые файлы должны быть там. Если эта папка пуста, значит, на этом же сервере нужно установить магазин версии, до которой вы обновляете свой магазин. В новом магазине активируйте все платные модули, на которые у вас есть лицензии. Теперь, новая установка содержит все нужные файлы. -
Запустите все предапгрейдные хуки (ядра и модулей). Пример кода, запускающего хуки:
<?php require_once (dirname(__FILE__) . DIRECTORY_SEPARATOR . 'top.inc.php'); $func = include 'upgrade/5.1/0/pre_upgrade.php'; $func(); ?>
-
Перепишите все файлы вручную. Вы можете загрузить файлы дистрибутива новой версии в папку своего магазина.
-
Запустите все постапгрейдные хуки. Используйте тот же код, что и на шаге 2. Код должен указывать на файл постапгрейдных хуков.
-
Обновите кеш магазина.
-
Запустите все постапгрейдные хуки с помощью того же кода, который использовался на шагах 2-4.
-
Запустите хуки, обновляющие языковые переменные. Ниже вы найдете пример кода хука:
<?php require_once (dirname(__FILE__) . DIRECTORY_SEPARATOR . 'top.inc.php'); // core yaml file $yamlFile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'sql' . DIRECTORY_SEPARATOR . 'xlite_data.yaml'; \XLite\Core\Translation::getInstance()->loadLabelsFromYaml($yamlFile); // module yaml file (example of one yaml file, you need to run all of them) $yamlFile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'XLite' . DIRECTORY_SEPARATOR . 'Module' . DIRECTORY_SEPARATOR . 'XC' . DIRECTORY_SEPARATOR . 'ProductComparison' . DIRECTORY_SEPARATOR . 'install.yaml'; \XLite\Core\Translation::getInstance()->loadLabelsFromYaml($yamlFile); \XLite\Core\Translation::getInstance()->reset(); ?>
На этом апгрейд завершен.
Дополнительная информация:
- X-Cart Upgrade General Steps (статья на английском языке)
- Upgrade hooks (статья на английском языке)
Помогите улучшить эту статью
Исходный код этой и других страниц документации открыт и доступен на GitHub.