2013-04-12 109 views
3

因此,在開發過程中的某一點,我添加了一個遷移功能,將列添加到我的用戶表中。此欄添加了「美元」屬性。之後,我決定通過編寫刪除遷移來刪除「美元」屬性。後來我意外地刪除了初始遷移來添加美元,所以爲了解決運行db時出現的錯誤:遷移到本地SQLite數據庫,我也刪除了RemoveDollarsFromUsers遷移。Ruby on Rails刪除仍在Heroku上運行的遷移

貌似在我部署到heroku之前解決了這個問題。在用heroku pg:reset DATABASE重置數據庫後,我跑heroku run rake db:migrate,並得到一個錯誤,說「美元」不是用戶的屬性。日誌文件顯示它曾嘗試運行我以前刪除的RemoveDollarsFromUsers遷移。

所以我再次檢查我的回購是最新的,然後我試圖完全重置並啓動一個新的應用程序在heroku,也許heroku是記住舊的遷移。有了新的heroku應用程序,我得到了同樣的錯誤,儘管我推送的回購應該沒有任何參考文件。

這是一個混帳問題?我唯一能想到的就是git使用RemoveDollarsFromUsers遷移來推送舊版本,否則heroku甚至不知道它呢?

+0

如果你做了'git status',你會得到什麼?你確定刪除了你提交刪除的文件後嗎? – fmendez

+0

對不起,這是我第一次使用這個網站,我不知道如何做那些嵌入式代碼窗口的人。當我運行git status的時候,它基本上給了我一個沒有被提交的東西的清單,包括刪除我正在談論的文件。很明顯,你正在做的事情。但是,即使在添加git之後。和git commit,它仍然說這些文件還沒有被提交 –

+0

您需要先將代碼推送到heroku。推後,嘗試重置數據庫,然後運行遷移。 – jvnill

回答

3

因此,遷移記錄在模式遷移表中,並指定運行耙子db:migrate甚至db:resetdb:setup時運行哪個點。

正如你所說,有時它會混淆,特別是如果你改變了LOWER鏈下的遷移。讓它再次運行整個事情的一個簡單方法是刪除shchema_migrations表(儘管如果您在生產環境中並且有要保留的數據,這可能會有風險)。現在運行db:migrate將逐步完成所有這些步驟。

返回基地的最簡單方法是在db/schema.rb之間創建一個新的遷移和複製(使其反映出您想要的結果)。然後,您可以刪除其他遷移,刪除數據庫,然後運行新的遷移。

確保備份任何你不想丟失的東西!