在数据库中手动删除迁移后恢复迁移

时间:2012-03-11 15:02:19

标签: ruby-on-rails-3

我有一个名为“20120311145341_create_resource1s.rb”的迁移。我意外地在数据库中删除了该表。我运行了“rake db:migrate”但它没有恢复该表。如何恢复?

1 个答案:

答案 0 :(得分:7)

您无法再次运行db:migrate,因为我认为您已经进行了最新的迁移。

a)如果您尝试重新创建的迁移是最新的迁移,则可以执行以下操作以回滚它,然后再次运行它。

rake db:rollback
rake db:migrate

b)如果不是最新的迁移,则需要列出db/migrate目录中的文件,将上一次迁移的版本注释为20120311145341_create_resource1s.rb,然后运行:

rake db:migrate VERSION=20120309101821(将版本更改为适合您的版本)
rake db:migrate

请注意,如果您收到类似Mysql2::Error: Unknown table 'xxx': DROP TABLE 'xxx'之类的错误,可以解决此问题,确保在迁移方法中检查表格是否存在:

  def self.down
    drop_table :xxx if ActiveRecord::Base.connection.table_exists? 'xxx'
  end

我希望它有所帮助。