Перейти к содержимому

Обновление сторонних решений - совместимость, проверка, откат

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

Решение

Смотрим версии установленных решений:

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.module
mysqldump -u user -p base b_vendor_module_data | gzip > /backup/vendor-data.sql.gz

Откат существует там, где заранее снята копия. Вернуть предыдущую версию решения из Маркетплейса удаётся не всегда, а копия каталога и его таблиц работает в любом случае.

Обновление продукта и обновление решений разносят по времени. Иначе при поломке непонятно, что виновато: новое ядро или новая версия чужого кода.

Список решений с их версиями полезно держать в описании проекта. Через год он отвечает на вопрос «что тут вообще стоит» быстрее, чем чтение каталога модулей.

Брошенное решение - это будущая работа, а не текущая. Замену ему ищут заранее, а не в тот день, когда обновление продукта окончательно его сломает.

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

Типичные проблемы

После обновления сайт перестал открываться.

Новая версия решения несовместима с текущей версией продукта. Совместимость смотрят до обновления, а не уже после первой же случившейся поломки.

Непонятно, какое из решений сломалось.

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

Вернуть прежнюю версию решения не удаётся.

Предыдущая версия этого решения в самом Маркетплейсе уже давно совсем недоступна. Копию каталога решения и его таблиц снимают до начала самого этого обновления.

Обмен сломался через неделю после обновления.

Проверяли только открытие страниц, а не сам обмен. Проходят именно те сценарии, за которые это самое решение у вас отвечает.

Решение не обновляется вовсе.

Закончилась подписка на обновления или автор его бросил. Дату последней версии решения стоит смотреть у себя вполне достаточно регулярно.

Частые вопросы

Как узнать, совместимо ли решение с моей версией?

По описанию решения в Маркетплейсе и по его требованиям к модулям. Проверять это до обновления дешевле.

Обновлять ли решения вместе с продуктом?

Лучше по очереди и с проверкой между шагами. Так при поломке понятно, что виновато.

Что делать с брошенным решением?

Искать замену или переносить его функции в свой код. Ждать обновления от автора бессмысленно.

Нужна ли копия перед каждым обновлением?

Перед обновлением решения, от которого зависят деньги, - обязательно. Для мелких дополнений хватает копии файлов.

Смежное

Первоисточник