是否可以仅使用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
。
当然,我可以删除所有相关文件。然后我逐个添加每个迁移,在每个迁移之间运行“所有”迁移。但这似乎是野蛮的。
答案 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