如何修复迁移,以便rake db:migrate再次运行

时间:2013-03-19 15:56:31

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

原始问题是某些迁移文件最初是在计算机上运行的(如生产)。后来,一些迁移​​以某种方式被删除,无法恢复。

因此,要使用该应用程序启动并运行新计算机,我必须手动重新创建缺少的迁移。

因此,已执行已删除迁移的计算机现在正在抛出这些错误。

PG::Error: ERROR: relation "some_relation" already exists

我不能只在db:reset生产数据库,因为我不能丢失这些数据。

当我跑步时,会出现rake db:test:prepare这样的内容:

You have 4 pending migrations:
  20130112203055 CreateSomeTable
  20130113180203 AddSomeColumnToTable
  20130113204017 ChangeSomeOtherColumns
  20130311203729 CreateAnotherTable
Run `rake db:migrate` to update your database then try again.

显然,运行db:migrate将给出PG :: Error,如上所述。问题是已通过已删除的迁移完成了架构更改。上述“待定”迁移必须在事后重新创建。

有没有办法解决这个问题,以便db:migrate再次运作?

1 个答案:

答案 0 :(得分:1)

尝试以下方法,

rake db:migrate:down VERSION=20121031XXXXXXXX
rake db:migrate

其中20121031XXXXXXXX是迁移名称的日期戳。换句话说,您将进行名为20120410214815_some_relation.rb的迁移(如),并从文件名中复制日期戳并将其粘贴到命令中。这是Rails Guide on Migrations for reference