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

Готовое решение в проекте - установка, вмешательство, удаление

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

Решение

Проходим установку на копии сайта:

Окно терминала
# копия базы и файлов до установки - это и есть план отката
mysqldump --single-transaction -u user -p base | gzip > /backup/pre-install.sql.gz
# на копии проверяют: главная, каталог, оформление заказа, обмен с учётной системой
# и замеряют время ответа до и после установки

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

Смотрим, что уже установлено:

foreach (glob($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/*', GLOB_ONLYDIR) as $dir) {
$id = basename($dir);
if (str_contains($id, '.')) { // у сторонних решений в имени всегда точка
$on = \Bitrix\Main\ModuleManager::isModuleInstalled($id) ? 'установлен' : 'лежит рядом';
printf("%-30s %s\n", $id, $on);
}
}

Установленное решение и лежащий рядом каталог - разные вещи. Второе встречается после неудачных установок и переносов, и такой каталог годами вводит в заблуждение того, кто разбирается в проекте.

Находим, куда решение вмешалось:

$manager = \Bitrix\Main\EventManager::getInstance();
foreach ($manager->findEventHandlers('main', 'OnBeforeProlog') as $handler) {
printf("%s: %s\n", $handler['TO_MODULE_ID'], $handler['TO_NAME']);
}
// то же самое смотрят по событиям каталога, заказов и пользователей

Решение вмешивается в проект подпиской на события. Обработчик на событии, которое случается на каждой странице, и есть самое частое объяснение внезапно подешевевшей скорости сайта.

Убираем решение и его следы:

1. Удаление модуля из административной части
2. Проверка своих таблиц решения: часть удаляется, часть остаётся
3. Настройки решения в опциях модуля
4. Файлы: шаблоны компонентов, загрузки, свои каталоги

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

Ставить решение стоит по одному за раз, с проверкой между установками. Два решения, поставленные подряд, при поломке дают ровно один вопрос: которое из них, и ответ на него ищется дольше самой установки.

Правки в файлах чужого решения живут до его обновления. Нужное поведение получают своим кодом на его событиях, а не правкой файлов внутри чужого каталога.

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

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

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

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

Обработчик решения падает на общем событии каждой страницы. Такое решение отключают и разбирают уже на копии сайта.

Сайт стал заметно медленнее без видимой причины.

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

Два решения спорят за один компонент.

Оба положили свой шаблон или свой класс на одно и то же место. Побеждает то, что подключилось последним.

Решение перестало обновляться.

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

После удаления решения в базе остались его таблицы.

Удаление модуля чистит только то, что предусмотрел автор. Остальное убирают руками по списку.

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

Как быстро отключить решение при поломке?

Удалением модуля из административной части или возвратом копии. Правка его файлов вслепую делает только хуже.

Что проверить до покупки?

Поддерживаемые версии продукта, дату обновления и отзывы. Заброшенное решение однажды не переживёт обновление ядра.

Можно ли править файлы чужого решения?

Правки исчезнут при его обновлении. Своё поведение получают своим кодом на событиях решения.

Как понять, что тормозит именно решение?

Замером до установки и после неё на одной и той же странице. Без первого замера сравнивать не с чем.

Смежное

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