【问题标题】:what would cause migrations to do nothing except keep the correct version?除了保持正确的版本之外,什么会导致迁移什么都不做?
【发布时间】:2011-12-08 17:32:30
【问题描述】:

我有一个应用程序,我最初是在 rails 3.1 中编写的,但为了减少我在 heroku 上的 slug 大小,我生成了一个新的 rails 3.0.9 应用程序并手动移动了必要的代码(或者我认为是这样)。一切都按预期运行了一个多月,但我一直在使用 rake db:schema:load 因为我没有更改数据库架构。今天我试图改变我的架构并且迁移什么也没做。他们似乎认为他们正在运行并且他们正在跟踪版本,但我没有得到控制台的输出,也没有对 db 进行任何更改,schema.rb 文件也没有改变。

rake db:migrate --trace 实际上将 ** Execute db:schema:dump 作为最后一步,但 schema.rb 文件仍然没有我试图添加的列。有谁知道发生了什么?该应用程序已连接到数据库,一切正常我似乎无法运行任何迁移。我可以更改 schema.rb 文件并再次运行 rake:db:load 但我想避免在生产部署中丢失数据。

【问题讨论】:

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


    【解决方案1】:

    Rails 3.1 的迁移可以使用Migration#change 方法,该方法知道如何进行向上和向下迁移。在 3.0 中,您需要有一个单独的 Migration.upMigration.down 方法。您应该能够将change 更改为up,然后编写down 部分。

    正如 tee 指出的那样,您需要确保将 def change 更改为 def self.updef self.down,因为旧的迁移方法是类而不是实例方法。

    【讨论】:

    • 我实际上只是向 IRC 频道中的某个人解释了这一点,然后一个灯泡在我脑海中熄灭了。谢谢艾米丽,我觉得自己很笨;)是时候去改变它们了。
    • 我也刚被这个咬了。注意 up/down 是类方法,所以将“def change”改为“def self.up”并添加“def self.down”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    相关资源
    最近更新 更多