Sequelize.js: как использовать миграции и синхронизацию

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

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

С этой целью в настоящее время яя бегуsync force: true когда мое приложение запускается, если я изменил определения модели. Это удаляет все таблицы и делает их с нуля. Я мог бы опуститьforce возможность создать только новые таблицы. Но если существующие изменились, это бесполезно.

Так как я добавляю в миграции, как все работает? Очевидно, я неЯ хочу, чтобы существующие таблицы (с данными в них) были уничтожены, поэтомуsync force: true не может быть и речи. В других приложениях ямы помогли разработать (Laravel и другие фреймворки) как часть приложенияВ процедуре развертывания мы запускаем команду migrate для запуска любых отложенных миграций. Но в этих приложениях самая первая миграция имеет скелетную базу данных, причем база данных находится в состоянии, когда она находилась на ранней стадии разработки - первый альфа-релиз или что-то еще. Таким образом, даже экземпляр приложения, опоздавшего на вечеринку, может набрать скорость за один раз, выполнив все миграции последовательно.

Как мне сгенерировать такой "Первая миграция " в секвелизе? Если я неЕсли у него один экземпляр, то в новом экземпляре приложения, находящемся где-то внизу строки, либо не будет базы данных скелета для запуска миграций, либо он запустит синхронизацию в начале и переведет базу данных в новое состояние со всеми новыми таблицами и т. д. , но затем, когда он пытается запустить миграции, они выиграли »Это не имеет смысла, поскольку они были написаны с учетом исходной базы данных и каждой последующей итерации.

Мой мыслительный процесс: на каждом этапе исходная база данных плюс каждая последовательная миграция должны равняться (плюс или минус данные) базе данных, генерируемой приsync force: true это запустить. Это связано с тем, что описания моделей в коде описывают структуру базы данных. Поэтому, возможно, если нет таблицы миграции, мы просто запускаем синхронизацию и помечаем все миграции как выполненные, даже если они не былиТ беги. Это то, что мне нужно сделать (как?), Или Sequelize должен делать это сам, или я лаю не на том дереве? И если яВ правильной области, безусловно, должен быть хороший способ автоматически генерировать большую часть миграции, учитывая старые модели (с помощью хеша коммитов? или даже каждую миграцию можно привязать к коммиту? Я допускаю, что думаю, что не портативная гит-центричная вселенная) и новые модели. Он может различать структуру и генерировать команды, необходимые для преобразования базы данных из старой в новую и обратно, а затем разработчик может войти и внести любые необходимые изменения (удаление / перенос определенных данных и т. Д.).

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

Я должен что-то упустить.

TLDR: как настроить приложение и его миграции, чтобы можно было обновлять различные экземпляры живого приложения, а также новое приложение без устаревшей стартовой базы данных?

Ответы на вопрос(10)

Ваш ответ на вопрос