Содержание

Обновление на новую версию (апгрейд) и обновление текущей версии

Обозначение версии 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.

Если появились обновления, в зоне администратора вы увидите надпись Доступны обновления:

100.jpg

Также, уведомление об бновлениях появится на иконке новостей (колокольчик):

1.1.jpg

Цвет надписи Доступны обновления может быть оранжевым или зеленым. Оранжевый цвет сообщает о выходе версии с новыми функциями.

300.jpg

Зеленый текст сигнализирует о выходе багфиксной версии или версии, в которой есть и новые функции, и новые багфиксы.

3.jpg

Для просмотра доступных обновлений нажмите на ссылку Доступны обновления, откроется страница Обновления для вашей версии:

200.jpg

Вкладки на странице:

  • Вкладка Только исправления показывает багфиксные релизы ядра и модулей:

2.1.jpg

  • Вкладка Исправления и улучшения показывает новые версии ядра и модулей с новыми функциями: 2.2.jpg

Ссылка Дополнительные опции позволяет устанавливать обновления выборочно:

2.3.jpg

Следуйте данным инструкциям по апгрейду магазина:

  1. Создайте резервную копию магазина (файлов и базы данных). Бэкап необходим на случай сбоя обновления. Не пропускайте данный шаг, т.к. это может стоить вам часов переговоров с хостинг провайдером и восстановления магазина из серверного бэкапа. 8.jpg Для создания резервной копии необходим модуль Backup Master. Если модуль не установлен, установите и активируйте его. 11.jpg

  2. В зоне администратора магазина пройдите по ссылке Доступны обновления на страницу Обновления для вашей версии.

  3. Проверьте доступные обновления и выберите те, которые хотите установить. Если доступны оба вида апгрейда - мажорный и минорный - перейдите на соответствующую вкладку:

    • Чтобы установить только багфиксы, перейдите на вкладку Только исправления.
    • Чтобы установить багфиксы и обновить функциональность, перейдите на вкладку Исправления и улучшения.

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

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

  4. Выбрав обновления, в конце списка нажмите Установить обновления. 4.1.jpg

  5. Откроется страница, на которой нужно будет подтвердить начало обновления. Здесь вы увидите список компонентов для обновления, их текущую и целевую версии:

    51.jpg

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

    Обновления доступны только для магазинов с активированной лицензией. Если у вас тестовый магазин и никакая лицензия (бесплатная или платная) для него не активирована, вы не сможете пройти дальше этого шага, вы увидите предупреждение о лицензионной проблеме:

    24.jpg

    В этом случае, нужно, по крайней мере, активировать бесплатную лицензию или купить и активировать платную. После активации лицензии на странице обновления появится кнопка Продолжить.

  6. Как только вы нажмете Продолжить, будут скачаны обновления ядра и модулей:
    6.jpg

    Скачанные обновления будут распакованы: 25.jpg

    и проверены на целостность:
    7_checking_integrity.png

    Важно: если этот шаг не выполнен по причине плохого Интернет-соединения, измените значение REQUEST_LONG_TTL в скрипте <X-Cart 5>/var/run/classes/XLite/Core/Marketplace.php.

  7. На странице появится список загруженных обновлений. 7.jpg Также здесь нужно подтвердить создание резервной копии магазина: 17.jpg

На этом шаге возможны несколько предупреждений об ошибках: - Если какие-то из установленных модулей содержат апгрейдные хуки, и эти модули отключены, вам будет предложено удалить эти модули. Также, вы найдете ссылку на список отключенных модулей на случай, если вы решите не удалять, а активировать модуль. 26.jpg - Если в магазине установлены модули, которых нет в Маркетплейсе (т.е. модули были загружены вручную), и апгрейд изменяет 3 и 4 числа в номере версии, такие модули нужно будет отключить, хоть это и не обязательное требование. Если апгрейд является мажорным и изменяет 1 и 2 числа в номере версии, то вы увидите предупреждение, что такие модули будут отключены автоматически. - Если вы работаете с пробным 30-дневным магазином, в котором активированы платные модули на период ознакомления с софтом, при обновлении вам будет предложено удалить такие модули или активировать платную лицензию X-Cart. 28.jpg - Если в магазине изменены какие-то файлы, вы увидите такое предупреждение: 66.jpg - Во время апгрейда можно перезаписать измененные файлы их стандартныи вресиями или оставить модифицированные файлы как есть. При этом нужно понимать, что обновление модифицированного файла может привести к повреждению всего магазина.

  1. Для запуска апгрейда нажмите кнопку Установить обновления. Кнопка доступна только после подтверждения создания бэкапа магазина. 18.jpg

Начинается обновление магазина: - Запускаются предапгрейдные хуки. Если апгрейд с 5.0.14 на 5.1.3, то апгрейдные хуки - 5.1.0, 5.1.1, 5.1.2, 5.1.3 - запускаются на этом шаге. Также, запускаются апгрейдные хуки модулей; 19.jpg - Происходит перезаписывание файлов: добавляются новые файлы, старые - переписываются, файлы, которых нет в новой версии, удаляются;
- Запускаются постапгрейдные хуки. Процесс такой же, как при запуске предапгрейдных хуков; - Перестройка кеша;
- Запускаются поствосстановительные хуки. Процесс такой же, как при запуске преапгрейдных и постапгрейдных хуков;
- Происходит обновление языковых переменных. Скрипт берет все install.yaml файлы модулей и файл ядра yaml с языковыми переменными (<X-Cart 5>/sql/install.yaml), и помещает языковые переменные этих файлов в базу данных.
- Далее происходит развертывание: 20.jpg - и установка обновлений: 10_installing_updates.png

  1. По завершении установки, открывается страница с надписью Обновления для вашей версии. Не закрывайте эту страницу! и с вариантами восстановления магазина на случай проблем во время обновления. Если в магазине что-то не работает, можно определить, что не так, с помощью ссылок полного и частичного восстановления, или востановить прежнюю версию магазина из бэкапа. 1.jpg

    На этой странице вы найдёте список обновленных компонентов и ссылку на лог апгрейда: 2.jpg

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

Апгрейд вручную

Если во время автоматического апгрейда что-то пошло не так, апгрейд можно продолжить вручную.

Прежде всего, нужно установить, на каком шаге превался апгрейд. В самом конце файла <X-Cart 5>/var/log/upgrade.log вы можете посмотреть, какие хуки запускались, и какие файлы были переписаны. Если не все поствосстановительные хуки были запущены, значит, апгрейд прервался на 5 шаге. Если не все файлы были переписаны, значит, апгрейд остановился на 2 шаге. Когда проблемный шаг найден, переделайте его и все последующие шаги вручную.

  1. Как получить новые файлы. Прежде всего, проверьте папку <X-Cart 5>/var/tmp, все новые файлы должны быть там. Если эта папка пуста, значит, на этом же сервере нужно установить магазин версии, до которой вы обновляете свой магазин. В новом магазине активируйте все платные модули, на которые у вас есть лицензии. Теперь, новая установка содержит все нужные файлы.
  2. Запустите все предапгрейдные хуки (ядра и модулей). Пример кода, запускающего хуки: 

    <?php
    require_once (dirname(__FILE__) . DIRECTORY_SEPARATOR . 'top.inc.php');
    
    $func = include 'upgrade/5.1/0/pre_upgrade.php';
    $func();
    
    ?>
    
  3. Перепишите все файлы вручную. Вы можете загрузить файлы дистрибутива новой версии в папку своего магазина.

  4. Запустите все постапгрейдные хуки. Используйте тот же код, что и на шаге 2. Код должен указывать на файл постапгрейдных хуков.

  5. Обновите кеш магазина.

  6. Запустите все постапгрейдные хуки с помощью того же кода, который использовался на шагах 2-4.

  7. Запустите хуки, обновляющие языковые переменные. Ниже вы найдете пример кода хука: 

    <?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();
    ?>
    

На этом апгрейд завершен.

Дополнительная информация: