2016-12-13 4 views
0

В настоящее время я начал работать над NODE JS, где я использую SEQUELIZE ORM. Sequelize поддерживает миграции с использованием sequelize-cli, но в документации не объясняются все детали того, как они должны использоваться для миграции. Я хочу знать, возможно ли использование Sequelize CLI. Следующие пункты имеют важное значение с учетом развертывания ProdМиграции с SequelizeJS и CLI

  1. Автогенерация миграции файл, глядя на модели
  2. Автоматическое создание миграции файлов на основе новых изменений, внесенных в модель
  3. Генерирование SQL скрипт миграции, так что мы можем запустить это на PROD
  4. окружающей среды специфические миграции (Dev, Stage, Prod

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

ответ

1

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

В ответ на вопросы:

1. Автоматическое создание файла миграции, глядя на модели

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

2. Автоматическое создание файла миграции на основе новых изменений, внесенных в модель

не делать. То же, что и выше.

3. Генерирование SQL скрипт миграции, так что мы можем запустить это на PROD

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

4. Окружающая среда конкретные миграции (Dev, Стадия, Prod)

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

Update: Вот пример migartion, который работает (и работает вверх и вниз), чтобы добавить новый столбец булево:

'use strict'; 

module.exports = { 
    up: function (queryInterface, Sequelize) { 
    return queryInterface.addColumn(
     'my_table', 
     'my_new_column', 
     { 
     type: Sequelize.BOOLEAN, 
     } 
    ) 
    }, 

    down: function (queryInterface, Sequelize) { 
    return queryInterface.removeColumn('my_table', 'my_new_column') 
    } 
}; 
+0

спасибо так много @ joshua.paling теперь я имею хорошее представление о sequelize миграций и I понять мою роль в этом. Теперь, когда я начну миграцию, я вижу два способа. 1. Использование сценариев seelize 2. Sql. Я думаю, что второй подход будет более чистым, поскольку я буду писать sql-запросы в противовес api .. поскольку api не хорошо документированы, я не уверен, что их можно использовать.Я попробовал один перенос, используя api, когда я добавил столбец в таблицу. Но когда я пытаюсь его отменить ... миграция не удалила столбец. Это заставило меня задуматься о sql-запросах. Cn u plz предложите свою рекомендацию по этому вопросу –

+0

В идеале вы должны использовать sequelize API. Основное преимущество этого заключается в том, что ваши миграции должны работать независимо от используемой вами базы данных (например, MySQL, Postgres и т. Д.). Если API-интерфейс secelize не поддерживает то, что вы хотите сделать, то писать простой SQL в порядке. Что касается обновления и удаления столбца, я обновляю свой ответ с помощью примера migartion, который работает для меня. –

+0

Большое спасибо @ joshua.paling. Я очень ценю ваши усилия. И я согласен с тем, что когда-либо кажется, что трюки для написания миграций с использованием API, мы должны использовать простой SQL. Еще раз спасибо ! :) –