原始问题是某些迁移文件最初是在计算机上运行的(如生产)。后来,一些迁移以某种方式被删除,无法恢复。
因此,要使用该应用程序启动并运行新计算机,我必须手动重新创建缺少的迁移。
因此,已执行已删除迁移的计算机现在正在抛出这些错误。
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
再次运作?
答案 0 :(得分:1)
尝试以下方法,
rake db:migrate:down VERSION=20121031XXXXXXXX
rake db:migrate
其中20121031XXXXXXXX
是迁移名称的日期戳。换句话说,您将进行名为20120410214815_some_relation.rb
的迁移(如),并从文件名中复制日期戳并将其粘贴到命令中。这是Rails Guide on Migrations for reference。