Разделы Написать в Telegram

Обновление на бою

Коротко: бэкап → замена файлов → кнопка «Обновить» → проверка → сброс кеша.

Нажать «Обновить» — обязательный шаг, а не формальность. Разберём почему.

0. Проверьте версию PHP — до замены файлов

Начиная с выпуска 8.0.0 модулю нужен PHP 8.2 или новее. Посмотреть, что стоит на сервере, можно на экране Проверка стенда, строка «Ядро и PHP», — или в любом месте админки, где Битрикс показывает параметры системы.

Порядок здесь важен, и это единственное место на странице, где он важен по-настоящему. Кнопка «Обновить» на неподходящем PHP откажет и базу не тронет — это правильно и безопасно. Но файлы к тому моменту вы уже заменили, и вернуть их сможет только бэкап. Пока версия не поднята, модуль будет работать наполовину: словарь, подстановка переводов на витрине и админка останутся, а машинный перевод — очередь, разовый перевод и подсчёт использования фраз — отвечать перестанет. Причина при этом пишется в журнал событий и горит красной строкой на экране проверки стенда, так что искать её вслепую не придётся.

Если PHP поднять прямо сейчас нельзя — не заливайте файлы. Откладывать обновление безопаснее, чем откатывать его.

1. Бэкап

База. Достаточно этих объектов:

  • b_hl_block и сама таблица словаря — по умолчанию b_site_dictionary, точное имя смотрите в b_hl_block.TABLE_NAME;
  • b_mrlexndr_translate_state — очередь и отметки о переводах;
  • b_option WHERE MODULE_ID = 'mrlexndr.translate' — настройки;
  • b_module, b_module_to_module — регистрация модуля и обработчиков;
  • b_agent WHERE MODULE_ID = 'mrlexndr.translate'.

Файлы. Каталог модуля и заглушки страниц админки bitrix/admin/mrlexndr_translate_*.php.

2. Замена кода

Залейте новые файлы поверх старых.

Проверьте, что install/version.php содержит версию выше той, что записана в b_module. Иначе Битрикс не покажет кнопку «Обновить» — он показывает её только при расхождении версий. Что делать, если кнопки нет, — отдельная страница.

3. Нажмите «Обновить»

Marketplace → Установленные решения → Обновить рядом с модулем.

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

  • раскладывает файлы вне каталога модуля — скрипты, стили, заглушки страниц админки и эндпоинт. Они физически лежат в других местах дерева, и заменой каталога модуля не обновляются;
  • добавляет недостающие колонки таблицы состояния. Операция идемпотентна: повторный запуск ничего не портит;
  • приводит в порядок обработчики событий. Их состав между версиями меняется: какие-то добавляются, какие-то снимаются.

После успешного обновления на месте должны быть:

  • /local/js/mrlexndr.translate/ — редактор на сайте, перевод в списке и карточке;
  • /local/styles/mrlexndr.translate/;
  • /bitrix/tools/mrlexndr.translate/translate.php — единый эндпоинт.

Если обновление приходит не подменой файлов, а через сервис обновлений, сценарий другой: Обновление через сервис обновлений.

4. Проверьте структуру таблицы состояния

Колонки добавляются при каждом обновлении сами. Но если обновление по какой-то причине не выполнялось, недостающее можно добавить руками:

ALTER TABLE b_mrlexndr_translate_state ADD COLUMN FAILED_PROPS text NULL;
ALTER TABLE b_mrlexndr_translate_state ADD COLUMN MACHINE_PROPS text NULL;
ALTER TABLE b_mrlexndr_translate_state ADD COLUMN BROKEN_PROPS text NULL;

Ошибка «duplicate column» означает, что колонка уже есть, — это нормально и ничего не сломало.

5. Проверьте работу

Короткий прогон по живому сайту — Что проверить после выкладки.

6. Сбросьте кеш сайта

Настройки → Настройки продукта → Автокеширование, либо страница bitrix/admin/cache_etag.php.

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

Если что-то пошло не так

Модуль не меняет стандартные объекты Битрикса. Даже если полностью удалить его каталог и записи в b_module_to_module и b_agent, сайт продолжит работать — пропадёт только подстановка переводов.

Порядок отката — Удаление, переустановка, откат.