【问题标题】:Rails migration change sequence or orderRails 迁移更改顺序或顺序
【发布时间】:2012-05-04 22:11:08
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rails-migrations


    【解决方案1】:

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

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

    如果您更改了迁移顺序(我已经更改了),最好在您重新排序的所有迁移之前先下载版本。将VERSION 选项与db:migrate 一起使用。如果您要保留(而不是向下运行)编号最高的迁移是 20120318143249,请这样称呼它。

    rake db:migrate VERSION=20120318143249
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 并非总是如此。假设以后的迁移是可逆的,您可以按照@Marlin-Pierce 的建议rake db:migrate VERSION=<specific timestamp>
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-12-08
        • 2015-10-09
        • 2013-07-16
        • 1970-01-01
        • 2010-12-30
        • 2017-11-24
        • 2020-04-20
        • 2016-01-30
        • 2019-08-12
        相关资源
        最近更新 更多