我为我的 Rails 3 应用程序编写了一些迁移,但我想更改迁移的顺序。如何更改迁移顺序或顺序?是否像使用时间戳重命名迁移文件一样简单?
我知道这是一个奇怪的问题,但基本上,我弄乱了我的迁移并删除了一些旧的迁移,现在我需要在创建新表之前删除一个表。我也知道我可以在 create-the-new-table 迁移中包含 drop 语句,但我很想知道如何重新排序迁移。
我为我的 Rails 3 应用程序编写了一些迁移,但我想更改迁移的顺序。如何更改迁移顺序或顺序?是否像使用时间戳重命名迁移文件一样简单?
我知道这是一个奇怪的问题,但基本上,我弄乱了我的迁移并删除了一些旧的迁移,现在我需要在创建新表之前删除一个表。我也知道我可以在 create-the-new-table 迁移中包含 drop 语句,但我很想知道如何重新排序迁移。
是的,它会按照前缀的顺序运行尚未运行的迁移。在早期版本的 Rails 中,可能是2.1
或2.2
,它们曾经从 开始编号01
,但它们切换到了时间戳。
有一个表可以跟踪哪些迁移已经运行。目的是,多个开发人员添加了迁移,并稍后在版本控制中检查它们。因此,可能存在尚未运行的迁移,但在已运行的最高编号迁移之前编号。
如果您更改了迁移顺序,(我有)最好在您重新排序的所有迁移之前先下载版本。使用VERSION
带有 的选项db:migrate
。如果您想要保留(而不是向下运行)的最高编号迁移是20120318143249
,请以这种方式调用它。
rake db:migrate VERSION=20120318143249
我经常在迁移中运行下来,然后重新运行它,直到我对迁移的细节感到满意为止。有时我会重新订购它们,当我想处理其中一个时,我希望它是最后一个。
是的,文件名的前缀决定了执行的顺序。但是,请记住,如果您擦除数据库/重新开始,这只会改变您当前的系统。
我遇到了类似的问题,因为迁移的顺序不正确。在阅读 Mitch 的回答后,我决定重命名迁移以按照我需要的方式对日期进行排序。在这个修复之后,我跑了rails db:migrate
,它工作了。不是最优雅的解决方案,但它有效,所以我想我会分享它。