Введение

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

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

Для платформы

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

Однако intervolga.migrato не сильно подходит для продукта Битрикс24 и больше ориентирован на Битрикс: Управление сайтом.

Документация по обеим системам изложена и доступна в свободном доступе.

Альтернативная точка зрения

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

Отсюда и родилась идея “инсталлеров” - скриптов, чье выполнение должно изменить конфигурацию продукта таким образом, чтобы доставленный код через системы контроля версий делал свою работу.

В своих проектах мы используем папку /php_interface/install/ для хранения инсталлеров,/php_interface/install/setup.php как точку входа и папку /php_interface/install/steps/ для хранения непосредственных исполняемых файлов.

Сравнение между миграциями и инсталлерами

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

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

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