Сайт сломался после установки решения - разбор причин
Решение установлено, и сразу после этого витрина поехала или страница перестала открываться. Разбираем причины по убыванию частоты, начиная с самого решения.
С чего начать
Смотрим, что именно установилось и когда:
ls -lt /home/bitrix/www/bitrix/modules/ | head -5ls -lt /home/bitrix/www/bitrix/templates/ | head -5ls -lt /home/bitrix/www/local/templates/ 2>/dev/null | head -5# свежие каталоги называют и само решение, и его шаблоны# каталог local смотрят отдельно: решения ставятся и туда, и в bitrixВремя правки каталогов отделяет установленное сегодня от жившего месяцами. Это первое, что стоит увидеть: дальше разбор идёт вокруг конкретного решения, а не вокруг всего сайта.
Читаем журнал ошибок за время установки:
tail -100 /var/log/php-fpm/bx0-error.log | grep -iE 'fatal|error'grep -ri 'vendor.module' /home/bitrix/www/bitrix/modules/error.log | tail -5grep -ri 'vendor' /home/bitrix/www/bitrix/php_interface/dbconn.php 2>/dev/null# имя решения в ошибке снимает половину вопросов сразуСмотрим обработчики, которые повесило решение:
$conn = \Bitrix\Main\Application::getConnection();print_r($conn->query("SELECT FROM_MODULE_ID, MESSAGE_ID, TO_MODULE_ID, TO_CLASS, TO_METHOD FROM b_module_to_module WHERE TO_MODULE_ID LIKE 'vendor.%'")->fetchAll());// обработчики решения выполняются на каждом запросе к сайтуОбработчики - самый частый источник поломки. Решение подписывается на события корзины, заказа или сохранения элемента, и его ошибка выглядит как поломка штатного механизма платформы.
Отключаем решение целиком на минуту:
\Bitrix\Main\ModuleManager::isModuleInstalled('vendor.module'); // проверка фактаprint_r(\Bitrix\Main\ModuleManager::getInstalledModules()); // весь состав// снятие модуля в административном разделе удаляет и его обработчикиСнятие решения на минуту - самая быстрая проверка гипотезы. Если сайт ожил, дальше разбирают уже конкретный механизм, а не гадают на журналах.
Причины
-
Обработчик решения падает на каждом запросе примерно 30% случаев
ПризнакОшибка появляется на любой странице сайта, включая административный раздел.
ПроверкаСмотрим таблицу обработчиков и ищем среди них классы установленного решения.
Что делатьСнимаем решение и обращаемся к его разработчику с текстом ошибки и версией платформы.
-
Решение подменило шаблон компонента или стили витрины примерно 25% случаев
ПризнакСайт работает, но вёрстка блока поехала или пропал привычный элемент страницы.
ПроверкаСравниваем каталоги шаблонов по времени правки и смотрим подключённые файлы стилей.
Что делатьВозвращаем свой шаблон компонента и подключаем стили решения адресно, а не на весь сайт.
-
Решению не хватает модуля или версии платформы примерно 20% случаев
ПризнакСтраница падает с сообщением о неизвестном классе или об отсутствующем методе.
ПроверкаЧитаем требования решения и сверяем их с составом установленных на сайте модулей.
Что делатьДоустанавливаем нужный модуль либо отказываемся от решения на этой редакции продукта.
-
Решение положило свои файлы в каталог ядра примерно 15% случаев
ПризнакПоломка появилась не сразу, а после ближайшего обновления платформы продукта.
ПроверкаПроверяем каталог ядра на файлы решения и сверяем их с проверкой целостности.
Что делатьПереносим правки в каталог проекта и просим разработчика решения убрать вмешательство.
-
Агент решения грузит сервер и вешает страницы примерно 10% случаев
ПризнакСайт стал заметно медленнее, а нагрузка растёт волнами без роста посещаемости.
ПроверкаСмотрим список агентов и время их выполнения, отбирая появившиеся после установки.
Что делатьОтключаем агент решения или переносим его запуск на ночь через задание по расписанию.
Частые вопросы
Как быстро понять, виновато ли решение?
Снять его в административном разделе и повторить проблемный сценарий. Проверка занимает минуту и точнее любого чтения журналов.
Почему поломка появилась не сразу после установки?
Так выглядят правки ядра и обработчики редких событий: они срабатывают позже. Обновление платформы или первый заказ поднимают проблему на поверхность.
Можно ли просто удалить каталог решения?
Нет, останутся его обработчики и записи в базе, и сайт упадёт уже на них. Решение снимают штатно, а каталог удаляют только после этого.
Что делать, если решение нужно, а оно ломает сайт?
Написать разработчику с текстом ошибки, версией платформы и шагами повтора. До ответа решение держат выключенным на боевом сайте.
Как проверять решения заранее?
Ставить их сначала на копию сайта и прогонять там основные сценарии. Это единственный способ увидеть последствия до того, как их увидит покупатель.
Смежное
- Готовые решения - оглавление подтемы
- Готовое решение в проекте: установка, вмешательство, удаление - порядок установки и снятия
- Обновление сторонних решений: совместимость, проверка, откат - когда ломает обновление, а не установка
- Белая страница вместо сайта: разбор причин - когда страница пустая совсем
- Редакция продукта: ограничения, переход на старшую, ключ - требования решения к модулям
- Агенты не выполняются: разбор причин - агенты решения и нагрузка на сервер
- Приёмка чужого проекта: инвентарь, правки ядра, карта рисков - как найти вмешательства в ядро
- Модули и решения - устройство модулей и решений целиком
- Решение изнутри: файлы, следы, вмешательство - где искать следы установки