Ruby on rails 什么会导致迁移除了保持正确的版本之外什么都不做?

Ruby on rails 什么会导致迁移除了保持正确的版本之外什么都不做?,ruby-on-rails,ruby-on-rails-3,postgresql,migration,rails-migrations,Ruby On Rails,Ruby On Rails 3,Postgresql,Migration,Rails Migrations,我有一个我第一次在rails 3.1中编写的应用程序,但为了减少我在heroku上的slug大小,我生成了一个新的rails 3.0.9应用程序,并手动移动了必要的代码(或者我认为是这样)。在一个多月的时间里,一切都按预期工作,但我一直在使用rakedb:schema:load,因为我没有更改db模式。今天,我试图改变我的模式,而迁移却毫无作用。他们似乎认为自己正在运行,并在跟踪版本,但我没有得到控制台的输出,也没有对db进行任何更改,schema.rb文件也没有更改 rake db:migra

我有一个我第一次在rails 3.1中编写的应用程序,但为了减少我在heroku上的slug大小,我生成了一个新的rails 3.0.9应用程序,并手动移动了必要的代码(或者我认为是这样)。在一个多月的时间里,一切都按预期工作,但我一直在使用rakedb:schema:load,因为我没有更改db模式。今天,我试图改变我的模式,而迁移却毫无作用。他们似乎认为自己正在运行,并在跟踪版本,但我没有得到控制台的输出,也没有对db进行任何更改,schema.rb文件也没有更改


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

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


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

我实际上刚刚在IRC频道中向某人解释了这一点,我的头脑中突然出现了一个灯泡。谢谢你,艾米丽,我觉得自己很笨;)是时候去换了。我也被它咬了一口。请注意,up/down是类方法,因此将“defchange”更改为“defself.up”,并添加“defself.down”。