17

我为我的 Rails 3 应用程序编写了一些迁移,但我想更改迁移的顺序。如何更改迁移顺序或顺序?是否像使用时间戳重命名迁移文件一样简单?

我知道这是一个奇怪的问题,但基本上,我弄乱了我的迁移并删除了一些旧的迁移,现在我需要在创建新表之前删除一个表。我也知道我可以在 create-the-new-table 迁移中包含 drop 语句,但我很想知道如何重新排序迁移。

4

3 回答 3

17

是的,它会按照前缀的顺序运行尚未运行的迁移。在早期版本的 Rails 中,可能是2.12.2,它们曾经从 开始编号01,但它们切换到了时间戳。

有一个表可以跟踪哪些迁移已经运行。目的是,多个开发人员添加了迁移,并稍后在版本控制中检查它们。因此,可能存在尚未运行的迁移,但在已运行的最高编号迁移之前编号。

如果您更改了迁移顺序,(我有)最好在您重新排序的所有迁移之前先下载版本。使用VERSION带有 的选项db:migrate。如果您想要保留(而不是向下运行)的最高编号迁移是20120318143249,请以这种方式调用它。

rake db:migrate VERSION=20120318143249

我经常在迁移中运行下来,然后重新运行它,直到我对迁移的细节感到满意为止。有时我会重新订购它们,当我想处理其中一个时,我希望它是最后一个。

于 2012-05-04T22:31:15.083 回答
4

是的,文件名的前缀决定了执行的顺序。但是,请记住,如果您擦除数据库/重新开始,这只会改变您当前的系统。

于 2012-05-04T22:17:44.657 回答
1

我遇到了类似的问题,因为迁移的顺序不正确。在阅读 Mitch 的回答后,我决定重命名迁移以按照我需要的方式对日期进行排序。在这个修复之后,我跑了rails db:migrate,它工作了。不是最优雅的解决方案,但它有效,所以我想我会分享它。

于 2021-02-21T21:46:01.673 回答