[英]schema.rb messed up due to migrations in other branches
目前我正在使用龐大的rails應用程序和多個分支,每個分支都有一個新功能。 它發生了很多功能需要遷移,在將它與master合並之前應該不會出現問題:schema.rb已經使用dev數據庫的信息進行了更新!
澄清:
1. Branch A has migration create_table_x
2. Branch B has migration create_table_y
3. Branch A adds another create_table_z and runs db:migrate
4. You want to merge Branch A with Master and you see table_x, table_y and table_z in the schema.rb of Branch A.
在分支中的每次遷移之前重置+種子數據庫或為每個分支創建數據庫都不是一個選項。 由於2 GB SQL數據的巨大規模,它將無法使用。
我的問題:
是否真的需要將schema.rb保留在存儲庫中,因為每次遷移都會重建它?
如果是這樣,是否可以從遷移而不是數據庫轉儲構建架構?
你應該在你的倉庫中保留架構。 運行遷移將修復schema.rb文件中的合並沖突。 我簡單地回答你的問題
“強烈建議將此文件檢入您的版本控制系統。” -schema.rb
你獲得了額外的好處
rake db:schema:load
和
rake db:schema:dump
http://tbaggery.com/2010/10/24/reduce-your-rails-schema-conflicts.html
將schema.rb保留在repo中很重要,因為您希望新開發人員(或您的測試環境)能夠僅從schema.rb生成新數據庫。 當您進行大量遷移時,它們可能無法繼續運行,特別是如果它們依賴於不存在,或已更改的模型類,或者具有與首次運行遷移時不同的驗證。 運行測試時,您希望從schema.rb轉儲並重新創建數據庫,而不是每次運行完整的測試套件時重新運行所有遷移。
如果您同時處理兩個不同的功能分支,並在兩者中更改數據庫結構,我認為schema.rb是您遇到的問題中最少的。 如果重命名或刪除分支B中的列,則只要引用舊列,分支A就會中斷。 如果他們所做的只是創建新表,那就不那么糟了,但是當你從master合並到A時你希望更新schema.rb,這樣A不會嘗試再次運行遷移並失敗因為新表已經存在。
如果這不能回答你的問題,也許你可以解釋一下你的工作流程?
Fresh Temporary DB作為一種快速解決方法
例如,在特定分支上需要漂亮的db/schema.rb
時,請執行以下操作:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.