我有一个应用程序,我首先在rails 3.1中编写,但为了减少我在heroku上的slug大小我生成了一个新的rails 3.0.9应用程序并手动移动了必要的代码(或者我认为)。一切都按预期工作了一个多月,但我一直在使用rake db:schema:load因为我没有更改db模式。今天我试图改变我的架构,迁移无所作为。他们似乎认为他们正在运行并且他们正在跟踪版本,但我没有输出到控制台并且没有对db的更改,schema.rb文件也没有改变。
rake db:migrate --trace
实际上是** Execute db:schema:dump
作为最后一步,但schema.rb文件仍然没有我试图添加的列。有谁知道发生了什么事?该应用程序已连接到数据库,一切正常,我似乎无法运行任何迁移。我可以更改schema.rb文件并再次运行rake:db:load但我希望避免丢失生产部署中的数据。
答案 0 :(得分:3)
Rails 3.1的迁移可以使用Migration#change
方法,该方法知道如何执行向上和向下迁移。在3.0中,您需要使用单独的Migration.up
和Migration.down
方法。您应该可以将change
更改为up
,然后撰写down
部分。
正如Tee指出的那样,您需要确保将def change
更改为def self.up
和def self.down
,因为较旧的迁移方法是类而非实例方法。