Обновление сторонних решений - совместимость, проверка, откат
Обновляем сторонние решения так, чтобы это не становилось поводом для вечернего разбора: по одному, с проверкой и с возможностью вернуться.
Решение
Смотрим версии установленных решений:
foreach (glob($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/*', GLOB_ONLYDIR) as $dir) { $id = basename($dir); if (!str_contains($id, '.')) { continue; } $v = include $dir . '/install/version.php'; printf("%-28s %s\n", $id, $arModuleVersion['VERSION'] ?? '-');}У каждого решения своя версия и своя дата выпуска. Решение, у которого последняя версия двухлетней давности, стоит считать брошенным и планировать замену, а не ждать от него совместимости с новым ядром.
Обновляем по одному:
1. копия базы и файлов до обновления2. обновление одного решения3. проход по сценариям, за которые оно отвечает4. только потом следующее решение// три решения, обновлённые разом, при поломке дают три подозреваемыхНесколько решений сразу превращают разбор в гадание. Порядок «одно решение - одна проверка» кажется медленным ровно до первого случая, когда что-то ломается.
Проверяем то, за что решение отвечает:
// после обновления решения обмена: пробный обмен на нескольких товарах// после обновления решения оплаты: тестовый платёж и чек// после обновления решения доставки: расчёт по трём адресамAddMessage2Log('проверка после обновления ' . $moduleId . ': ok', 'vendor.shop');После обновления проходят сценарии, за которые решение отвечает. Общий взгляд на главную страницу ничего не показывает: ломается обычно то, что видно только при настоящей операции.
Готовим откат заранее:
# копия каталога решения и его таблиц до обновленияtar -czf /backup/vendor-module-$(date +%F).tgz /home/site/public_html/bitrix/modules/vendor.modulemysqldump -u user -p base b_vendor_module_data | gzip > /backup/vendor-data.sql.gzОткат существует там, где заранее снята копия. Вернуть предыдущую версию решения из Маркетплейса удаётся не всегда, а копия каталога и его таблиц работает в любом случае.
Обновление продукта и обновление решений разносят по времени. Иначе при поломке непонятно, что виновато: новое ядро или новая версия чужого кода.
Список решений с их версиями полезно держать в описании проекта. Через год он отвечает на вопрос «что тут вообще стоит» быстрее, чем чтение каталога модулей.
Брошенное решение - это будущая работа, а не текущая. Замену ему ищут заранее, а не в тот день, когда обновление продукта окончательно его сломает.
Договориться о времени обновлений стоит с самим магазином. Час простоя в понедельник утром и час простоя в воскресенье вечером стоят разных денег, и выбирать этот час должен тот, кто эти деньги считает.
Типичные проблемы
После обновления сайт перестал открываться.
Новая версия решения несовместима с текущей версией продукта. Совместимость смотрят до обновления, а не уже после первой же случившейся поломки.
Непонятно, какое из решений сломалось.
Обновлялись несколько решений подряд, без проверки между ними. Их обновляют строго по одному, с проверкой сценариев между этими самыми шагами.
Вернуть прежнюю версию решения не удаётся.
Предыдущая версия этого решения в самом Маркетплейсе уже давно совсем недоступна. Копию каталога решения и его таблиц снимают до начала самого этого обновления.
Обмен сломался через неделю после обновления.
Проверяли только открытие страниц, а не сам обмен. Проходят именно те сценарии, за которые это самое решение у вас отвечает.
Решение не обновляется вовсе.
Закончилась подписка на обновления или автор его бросил. Дату последней версии решения стоит смотреть у себя вполне достаточно регулярно.
Частые вопросы
Как узнать, совместимо ли решение с моей версией?
По описанию решения в Маркетплейсе и по его требованиям к модулям. Проверять это до обновления дешевле.
Обновлять ли решения вместе с продуктом?
Лучше по очереди и с проверкой между шагами. Так при поломке понятно, что виновато.
Что делать с брошенным решением?
Искать замену или переносить его функции в свой код. Ждать обновления от автора бессмысленно.
Нужна ли копия перед каждым обновлением?
Перед обновлением решения, от которого зависят деньги, - обязательно. Для мелких дополнений хватает копии файлов.
Смежное
-
Готовые решения - оглавление подтемы
-
Готовое решение в проекте: установка, вмешательство, удаление - что было до обновления
-
Обновление продукта: подготовка, порядок, откат - обновление самого ядра
-
Выкладка на боевой: порядок, структура, откат - тот же порядок для своего кода
-
Модули и решения - устройство модулей целиком
-
Сайт сломался после установки решения: разбор причин - тот же разбор для свежей установки
-
Решение изнутри: файлы, следы, вмешательство - что обновление переписывает в проекте