2012-06-25 46 views
2

我最近在嘗試更改架構中的列名時遇到錯誤。它在本地工作,但當我db:在Heroku上遷移時,它給了我一個錯誤,指出該列不存在。如何比較Heroku生產模式與本地開發模式?

在過去,我一直在統一我的Production模式和開發模式。這可能是因爲我本地創建了遷移,ran db:本地遷移,然後由於某種原因在本地刪除了遷移,然後推送到了heroku,導致遷移在本地運行,但不在prod中。 (我現在知道這是一件可怕的事情,我應該在self.down中輸入相反的函數,並且執行了rake db:rollback)

我想知道的是,我該如何檢查以查看是否我的本地和prod架構是不同的,有沒有辦法讓我可以更改我的本地表/列以適應製作?由於它似乎只適用於生產的東西,我知道我在本地環境中有無用的表/列。

回答

7

您可以在Heroku上運行bash的控制檯:

heroku run bash -a app_name 

從那裏,你可以使用標準的bash命令和貓的schema.rb文件比較到本地schema.rb瀏覽文件系統。

爲了統一模式,我建議通過Rails Guide to Migrations中Schema傾銷的詳細信息來閱讀。您可以將架構文件複製到本地環境中,然後運行`rake db:reset',這將放棄您的開發數據庫並從新架構重新創建它。請務必閱讀架構轉儲詳細信息,因爲有多種方法根據數據庫的需要轉儲架構。顯然,在你開始之前備份你需要的任何東西。

從這一點開始,你應該回到乾淨的狀態,在那裏你可以再次正確地開始遷移來更新你的本地應用程序和Heroku。

+0

非常感謝你! – kibaekr

+0

請問,您是否介意如何使用'cat'來達到上述建議的比較目的? – Numbers

4

rake db:schema:dump被記錄爲不能正常工作on Heroku's filesystem

您可以使用此一班輪打印架構在Heroku上運行的Rails應用程序:

heroku run rails runner "\"sio = StringIO.new; ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, sio); puts sio.string\"" --app [YOUR APP NAME]