Миграции

Урок 2 из 7

10 мин

Нормально

Что такое "миграция"?

Миграция в данном контексте — изменение структуры базы данных без потери консистентности. Дополнительно в рамках миграций может меняться состояние файловой системы.

Миграции нужны для следующих ситуаций, чтобы:

  • сохранять решение в виде, пригодном для установки на чистый портал (поставка кода модуля вместе со всеми наработками на чистый Битрикс24);
  • иметь возможность хранить изменения БД / файловой системы в VCS;
  • автоматизировать процесс передачи изменений клиенту.

Частью миграции может выступать:

  • Изменение файловой структуры “за пределами модуля”:
    • копирование компонентов в local/components/;
    • копирование css/js файлов в local/css/ и local/js/ соответственно;
    • копирование административных страниц в bitrix/admin/;
    • копирование публичных страниц и разделов в корень сайта и т.д.
  • Изменение структуры БД:
    • создание новых таблиц;
    • добавление пользовательских полей;
    • регистрация обработчиков событий;
    • регистрация агентов и т.д.

Типовая задача для решения

Поставить клиенту обновления модуля, требующие миграций в БД.

Как выполнять миграции

Поддерживать все вышеописанное можно разными способами.

Можно поставлять все изменения файловой структуры и БД в рамках класса модуля, в методе DoInstall(). При релизе новой версии модуля потребуется удалить старую, соответственно, потребуется поддерживать еще и метод DoUninstall().

Этот подход не очень хорош, т.к. оставляет открытым вопрос — чем полное удаление модуля отличается от переустановки в рамках релиза новой функциональности? Нужно ли удалять таблицы с пользовательскими данными, ранее созданные пользовательские поля и т.д.?

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

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

Такие файлы миграций придется запускать руками, на каждой среде отдельно.

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

В рамках данного урока вам будет предоставлен инструмент для запуска миграций.

Версионирование

Когда вы начинаете дорабатывать свою программу, вносить в нее новую функциональность, исправлять ошибки, — вам понадобится ее версионировать.

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

В модулях платформы предусмотрен специальный файл install/version.php, где вы должны указывать новую версию модуля и дату ее релиза.

Один из популярных способов версионирования - это semver. Используйте его и будьте уверены — все вокруг поймут, какого рода изменения вы внесли в том или ином релизе.

Выполним миграцию на практике

В рамках этого небольшого видео познакомимся с утилитой для выполнения миграции, которая предоставляется в курсе.

Пример выполнения миграции

5 мин

Список ресурсов

Материалы для выполнения практики

  • Скрипт для выполнения миграции (.zip)