2013-03-19 109 views
0

原始問題是某些遷移文件最初在計算機上運行(如生產)。後來,一些遷移​​被刪除,無法恢復。如何修復遷移以便rake db:migrate再次運行

因此,爲了讓一臺新機器與應用程序一起運行,我不得不手動重新創建缺少的遷移。

因此,已執行已刪除遷移的機器現在正在拋出這些錯誤。

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 ::錯誤如上所述。問題是模式更改已通過已刪除的遷移完成。事實之後,上述「未決」遷移必須重新創建。

有沒有辦法解決這個問題,所以db:migrate再次工作?

+0

在創建''some_relation''的遷移中,你能檢查一下該表是否已經存在嗎?做一些條件語句只創建表/索引/等,如果他們還沒有被創建? – MrDanA 2013-03-19 16:07:17

回答

1

嘗試以下,

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

哪裏20121031XXXXXXXX是遷移名日期戳。換句話說,您將有一個名爲20120410214815_some_relation.rb(like)的遷移,並從文件名複製日期戳並將其粘貼到命令中。這是Rails Guide on Migrations for reference

相關問題