2011-03-07 109 views
1

我想我可能已經刪除了一個遷移文件 - 我有很多,因爲我一直在改變我的表格。如果我刪除一個遷移文件會影響heroku嗎?

我想知道這是否會影響我的heroku部署。我的heroku rake db:migrate之前工作正常,但現在已停止工作。

heroku還告訴我,表已經存在,並中止耙任務。

我需要重新編寫缺少的遷移文件嗎?

感謝您的任何幫助,我真的很感激它。

+0

你永遠不應該刪除遷移文件。爲避免意外刪除它們,您應該使用版本控制系統。 – 2011-03-07 23:24:52

回答

6

不,我不認爲你可以重新編寫遷移..除非你知道datestamp是用於遷移文件名的。如果您查看db文件夾中的遷移文件的文件名,您會注意到它們都是有日期戳的。

此日期戳實際上存儲在您要寫入數據庫的字段中。如果你簽出你的數據庫,你會注意到一個'schema_migrations'表,你會發現你已經運行的所有遷移的日期戳。

如果您繼續刪除遷移文件,遷移是棘手的。如果可以的話,我會盡量不要刪除較早的遷移,尤其是如果它們已經推送到數據庫。如果您已經將它們推送到數據庫,那麼創建一個新的遷移文件來修復數據庫比回到舊的遷移和重構..它會讓你一個痛苦的世界試圖這樣做...

在你把它拆開之前,先在本地備份你的heroku數據庫,然後再嘗試修復你的遷移

heroku db:pull 

如果您還沒有推你刪除的遷移文件到您的Heroku的分支,你只能用你的最後遷移文件播放,嘗試回滾在Heroku上你最後的遷移第一,解決您的migrat離子,推回去,再試一次。

heroku rake db:rollback 

如果你已經嘗試過這種方式,你仍然遇到問題,你可以做到以下幾點。但要警告!你看到的錯誤是因爲你試圖將表推送到已存在的數據庫。如果您在新遷移中添加force => true標記,則可以將其有效地推送到數據庫,但實際上您將刪除現有的表並創建新的表,因此舊錶中的任何數據都將丟失。但是,如果你確定並確信你不會破壞任何東西,你可以在遷移的頂部使用類似的東西。

create_table "table_name", :force => true do |t| 
    t.column "name", :string.... 
+0

優秀,深入的答案。 – 2011-03-08 03:08:22

+0

感謝您的文章! – hanumanDev 2011-03-08 12:52:02

相關問題