4  /  37

Обновления модулей

Просмотров: 24523
Дата последнего изменения: 19.01.2022
Сложность урока:
2 уровень - несложные понятия и действия, но не расслабляйтесь.
1
2
3
4
5

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

  Структура обновления модуля

Файлы папки с обновлением:

  • /install/version.php - файл содержит номер версии обновления и дату его выпуска. Обязательный файл.
  • description.* - содержит описание обновления, где * - идентификатор языка в системе. Например, описание обновления модуля на русском языке будет содержаться в файле description.ru, на английском - description.en. Обязательный файл.
    В описании допустимо использование html тегов: <b>,<i>,<u>,<li>,<ul>,<span>, <br>
  • updater.php – файл запускается при установке обновления. С помощью этого файла выполняются действия для обновления на новую версию. Необязательный файл.
  • version_control.txt - служит для организации связи между версиями модулей. Файл содержит ссылки на версии модулей, от которых зависит данное обновление. Например, файл может содержать iblock,13.8.0. Это означает, что данное обновление будет установлено, если в системе установлен модуль Информационные блоки версии не ниже 13.8.0. Либо модуль Информационные блоки не установлен вообще. Необязательный файл.

Перед загрузкой модуля на сайт необходимо запаковать сборку обновления модуля в архив. Для этого выполните следующее:

  • Создайте каталог с названием версии обновления. Например, 0.0.2, 0.0.5 и т.д.
  • Скопируйте в созданную папку файлы и каталоги обновления модуля.
  • Заархивируйте папку в формат .zip или .tar.gz.

В результате должно получиться, например, 0.0.2.zip, 0.0.5.zip. Например, папка с обновлением может иметь следующую структуру:

  updater.php

Структура апдейтера

Апдейтер может создаваться в двух формах. При этом в каждом конкретном обновлении может присутствовать только какая-то одна.

  • Файл /updater.php в корне папки с обновлением. Этот файл будет запускаться на выполнение в качестве апдейтера.
  • Папка /updater в корне папки с обновлением. В качестве апдейтера будет запускаться файл index.php в ней.

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

Описание

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

В каждом обновлении может быть только один updater.php. Но может и не быть ни одного, если требуется обновить только ядро.

Апдейтер может выполнить PHP-код. При этом есть набор архитектурных ограничений, которые необходимо учитывать.

Ограничения

  • Обновления устанавливаются на все модули, которые входят в лицензию и присутствуют на сайте Установлен модуль или нет, не имеет значения . Это надо учитывать при написании кода апдейтера.
  • Обновления могут переустанавливаться несколько раз. Соответственно код апдейтера должен учитывать возможность многократного запуска.
  • Апдейтер выполняется один раз непосредственно перед копированием файлов обновления из папки обновления в ядро на одном хите. Если за один хит обновляются несколько версий одного модуля, то их апдейтеры выполняются последовательно в соответствии с их версиями. Если за один хит обновляются несколько модулей, то выполняются апдейтеры всех этих модулей, но межмодульный порядок их выполнения не определен.
  • АПИ текущего обновления недоступен на хите обновления В случае использования нового кода в апдейтере будет получена ошибка: Class 'Имя\Класса' not found . А если есть циклические межверсионные зависимости, которые связывают несколько версий одного модуля, то будет недоступен АПИ всех этих обновлений. Использование нового АПИ в коде updater.php невозможно. Использование любого АПИ в коде апдейтера возможно, но не рекомендуется.
  • При выполнении апдейтера доступен и он, и вся папка с обновлением.

  Обновление

Примечание: Ядро Ядро продукта - файлы, находящиеся в директории /bitrix/modules/, а также файлы системных компонентов: /bitrix/components/bitrix/.
Подробнее...
обновляется системой обновлений автоматически при установке обновлений. Другие же части сайта, включая базу данных, автоматически не обновляются.

Все файлы обновления просто копируются как есть в папку модуля. И если ваш модуль полностью расположен в этом каталоге, то обновление завершено. Если же по логике работы модуля требуется чтобы часть файлов была вне ядра, в какой-либо другой папке, то с помощью updater.php нужно перенести их в нужное место.

Механизм апдейтеров (updater.php) служит именно для того, чтобы применить необходимые изменения к тем частям сайта, которые не являются ядром. С помощью этого механизма можно привести структуру базы данных, системные и публичные файлы в соответствие с текущей версией ядра.

Если возникла необходимость скопировать файлы в обновлении самостоятельно, то нужно использовать:

$updater->CopyFiles("install/classes", "modules/quintura.search/classes");

В этом случае файлы из папки /install/classes, находящиеся в папке обновления, скопируются в папку /local/modules/quintura.search/classes.

При выпуске последующих обновлений может возникнуть потребность установить его зависимость от новых модулей. Ссылки на версии модулей, от которых зависит данное обновление, содержатся в файле version_control.txt. Но необходимо помнить, что само обновление с зависимостью не будет по умолчанию требовать установки указанных модулей. В этом случае возможны два варианта:

  1. Обновление всё равно устанавливать, проверять присутствие нужного модуля уже в функционале модуля.
  2. Добавить в код обновления проверку на нужный модуль, и при его отсутствии выводить ошибку пользователю. Обновление не будет установлено, если присвоить переменной $errorMessage строку сообщения.

Примечание: При создании архива с решением/обновлением через консольную утилиту tar в MacOS, нужно предварительно выставлять переменную окружения: export COPYFILE_DISABLE=true


Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии