仅运行下一个迁移文件

时间:2017-04-24 14:46:14

标签: migrate sequelize-cli

是否可以仅使用sequelize-cli运行下一个迁移文件?

我一直在查看cli的文档和帮助部分,它似乎不是这样的功能。

例如,在运行sequelize db:migrate:status命令时,我有以下内容;

Loaded configuration file "config/config.js".
Using environment "development".
up   20170301090141-create-something.js
up   20170301133113-create-else.js
up   20170301133821-Update-some-stuff.js
up   20170301135339-create-some-model.js
up   20170307152706-update-some-stuff-two.js
down 20170316142544-create-an-index.js
down 20170421112638-do-some-refactor.js

我想只运行20170316142544-create-an-index.js

当然,我可以删除所有相关文件。然后我逐个添加每个迁移,在每个迁移之间运行“所有”迁移。但这似乎是野蛮的。

5 个答案:

答案 0 :(得分:10)

我是从Google来到这里的,无法在文档中找到任何选项。但是,CLI sequelize-cli db:migrate --help显示用于选择要运行的迁移范围的选项。

它们是:

--to Migration name to run migrations until
--from Migration name to start migrations from (excluding)

显然,您需要提供确切的文件名而不是迁移名称。 (在源代码中找到)

TLDR:

npx sequelize-cli db:migrate --from will-not-be-included.js --to filename.js

答案 1 :(得分:2)

问题是,Sequelize仅执行那些尚未执行的迁移,意味着未决。

这意味着当您运行命令 sequelize:migrate 时,它将仅执行仍处于挂起状态的命令。

答案 2 :(得分:0)

我认为您已经制作了所有模型,然后尝试运行迁移。

因此,我找到了一个解决方案,我不知道这是否是个好主意。 Sequelize用即时实际日期命名迁移文件。因此,如果您更改其他所需文件的名称的第一个字符串,例如。

20190717191628-create-team.js
20190717191909-create-player.js 
          **for**
20190717191909-create-team.js
20190717191628-create-player.js 

然后,按需要排序所有文件,然后运行 db:migrate 命令。

答案 3 :(得分:0)

您可以简单地更改迁移文件夹中的文件顺序。由于文件名始终以时间戳开头,因此为了更改迁移顺序,您只需要通过重命名文件来相应地更新时间戳。

20170316142544-create-an-index.js。只需查看哪个迁移最新运行,然后在执行的迁移时间戳旁边添加重命名此迁移时间戳即可。在其后添加其他错别字或将其移出文件夹一秒钟,然后进行迁移。

答案 4 :(得分:0)

我认为这个问题已经回答了,但是有些人仍然感到困惑。我将尝试针对这个特定问题给出直接答案:

npx sequelize-cli db:migrate --to 20170316142544-create-an-index.js

在这种特定情况下,无需添加选项--from,因为20170316142544-create-an-index.js是下一个要应用的迁移。

但是,如果问题是:

我只想运行20170421112638-do-some-refactor.js

然后,您将不得不使用选项--from来跳过所有其他迁移,直到达到所需的迁移为止。在这种情况下:

npx sequelize-cli db:migrate --from 20170316142544-create-an-index.js --to 20170421112638-do-some-refactor.js