簡體   English   中英

schema.rb由於其他分支中的遷移而搞砸了

[英]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文件中的合並沖突。 我簡單地回答你的問題

  1. 這是必需的嗎? 不是真的,而是良好的做法。

“強烈建議將此文件檢入您的版本控制系統。” -schema.rb

  1. 有可能的? 是的,但您可能想問自己是否真的通過這樣做來節省任何時間,無論是手動還是從其他地方的遷移構建模式並將其推入。

你獲得了額外的好處

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時,請執行以下操作:

  1. git checkout - db / schema.rb
  2. 切換到不同的開發數據庫,​​即更新config / database.yml
  3. rake db:drop && rake db:setup
  4. rake db:migrate
  5. 提交你漂亮的db / schema.rb
  6. 還原config / database.yaml中的更改

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM