Что такое "миграция"?
Миграция в данном контексте — изменение структуры базы данных без потери консистентности. Дополнительно в рамках миграций может меняться состояние файловой системы.
Миграции нужны для следующих ситуаций, чтобы:
- сохранять решение в виде, пригодном для установки на чистый портал (поставка кода модуля вместе со всеми наработками на чистый Битрикс24);
- иметь возможность хранить изменения БД / файловой системы в VCS;
- автоматизировать процесс передачи изменений клиенту.
Частью миграции может выступать:
- Изменение файловой структуры “за пределами модуля”:
- копирование компонентов в local/components/;
- копирование css/js файлов в local/css/ и local/js/ соответственно;
- копирование административных страниц в bitrix/admin/;
- копирование публичных страниц и разделов в корень сайта и т.д.
- Изменение структуры БД:
- создание новых таблиц;
- добавление пользовательских полей;
- регистрация обработчиков событий;
- регистрация агентов и т.д.
Типовая задача для решения
Поставить клиенту обновления модуля, требующие миграций в БД.
Как выполнять миграции
Поддерживать все вышеописанное можно разными способами.
Можно поставлять все изменения файловой структуры и БД в рамках класса модуля, в методе DoInstall(). При релизе новой версии модуля потребуется удалить старую, соответственно, потребуется поддерживать еще и метод DoUninstall().
Этот подход не очень хорош, т.к. оставляет открытым вопрос — чем полное удаление модуля отличается от переустановки в рамках релиза новой функциональности? Нужно ли удалять таблицы с пользовательскими данными, ранее созданные пользовательские поля и т.д.?
При неаккуратном использовании этого подхода есть риск безвозвратной потери пользовательских данных.
Можно же поставлять код, выполняющий миграцию, отдельными файлами — этот вариант лучше предыдущего, так как позволяет явно разграничивать процессы установки обновлений и удаления модуля.
Такие файлы миграций придется запускать руками, на каждой среде отдельно.
Значительным улучшением этого процесса будет использование какого-то инструмента для применения всех ранее невыполненных миграций. Можно взять существующий инструмент из интернета или написать свой.
В рамках данного урока вам будет предоставлен инструмент для запуска миграций.
Версионирование
Когда вы начинаете дорабатывать свою программу, вносить в нее новую функциональность, исправлять ошибки, — вам понадобится ее версионировать.
Это необходимо для того, чтобы каждое состояние кодовой базы соответствовало конкретному номеру версии (что позволит легко откатиться на предыдущую рабочую версию в случае возникновения проблем с новой).
В модулях платформы предусмотрен специальный файл install/version.php, где вы должны указывать новую версию модуля и дату ее релиза.
Один из популярных способов версионирования - это semver. Используйте его и будьте уверены — все вокруг поймут, какого рода изменения вы внесли в том или ином релизе.
Выполним миграцию на практике
В рамках этого небольшого видео познакомимся с утилитой для выполнения миграции, которая предоставляется в курсе.
Пример выполнения миграции
5 мин
Список ресурсов
Материалы для выполнения практики
- Скрипт для выполнения миграции (.zip)