最初的问题是某些迁移文件最初是在机器上运行的(如生产)。后来,一些迁移不知何故被删除,无法恢复。
因此,为了让新机器启动并运行该应用程序,我必须手动重新创建丢失的迁移。
因此,已经执行了已删除迁移的机器现在正在抛出这些错误。
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
再次起作用?