【问题标题】:Run only the next migration file仅运行下一个迁移文件
【发布时间】:2017-09-21 07:41:36
【问题描述】:

是否可以使用 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

当然,我可以删除所有相关文件。然后我将每个迁移一个接一个地添加回来,在每个迁移之间运行“所有”迁移。但这似乎太野蛮了。

【问题讨论】:

  • 当您运行sequelize:migrate 命令时,sequelize 将仅运行仍待处理的迁移(即之前从未运行过的迁移)。为了跟踪运行的内容,sequelize 使用数据库中的一个表。但是,没有办法只运行特定的迁移文件。
  • @JulienKlepatch 太糟糕了。有时这正是您想要做的,一次只运行一个。我解决了我的问题,将不需要的那些从文件夹中移出,并通过一次复制一个来运行“一个接一个”。
  • 我明白了。另一种可能性是为sequelize db:migrate 命令指定一个带有--migrations-path 标志的不同迁移文件夹

标签: migrate sequelize-cli


【解决方案1】:

我从 Google 来到这里,但在 doc 中找不到任何选项。但是,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

【讨论】:

  • 只需要--to 选项:npx sequelize-cli db:migrate --to filename.js
【解决方案2】:

我认为问题已经得到解答,但有些人仍然感到困惑。对于这个具体问题,我会尽量给出一个直接的答案:

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

【讨论】:

  • 谢谢。这个拯救了我的一天
【解决方案3】:

问题是,Sequelize 只执行那些尚未执行的迁移,意味着待处理的迁移。

这意味着当您运行命令 sequelize:migrate 时,它只会执行那些仍在等待中的人。

【讨论】:

    【解决方案4】:

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

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

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

    之后,根据需要对所有文件进行排序,然后运行 ​​db:migrate 命令。

    【讨论】:

      【解决方案5】:

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

      20170316142544-create-an-index.js。只需查看最新运行的迁移并添加重命名此迁移时间戳,时间戳紧邻执行的时间戳。在它之后添加一些错别字或将它们移出文件夹一秒钟然后迁移。

      【讨论】:

        猜你喜欢
        • 2010-10-19
        • 2023-04-08
        • 2011-06-01
        • 1970-01-01
        • 2020-01-07
        • 2020-01-02
        • 2016-02-03
        • 2012-04-12
        相关资源
        最近更新 更多