2009-09-03 26 views
3

我們有一組開發人員,他們每個人都將使用Rails工具爲我們的系統開發數據庫遷移。遷移似乎首先是管理對數據庫模式的更改的一種好方法,但隨着我們的繼續,以分佈式方式管理更改變得越來越困難。如果我們各自發展自己的移民,我們如何調和發生的問題?您如何管理Ruby on Rails遷移與開發團隊?

要具體談談這些問題,想象以下場景時間表:

  1. 開發人員A創建了上午9:00
  2. 開發人員B一個新的遷移文件時間戳10創建另一個新的遷移文件時間戳: 00
  3. 開發人員B檢查中日10:00遷移上午11:00
  4. 在日上午9:00遷移開發A檢查在上午11:30

這裏可能會出現一些問題,尤其是當兩個遷移文件在其更改中發生衝突時,但最基本的問題是某些人在早上9點遷移時運行了上午10:00的遷移簽入。與遷移相關的時間戳當然是文件創建時的時間,而不是簽入時的時間戳,這會弄亂Rails遷移器。

這是一個可解決的問題,但解決方案可能有很多不同的選項。解決這個問題的最好方法是什麼(或者至少是一個好方法)?

+0

這更多關於我的好奇心比什麼都重要,但是你有沒有試過你描述的情景?發生了什麼? –

回答

6

這似乎更像是一個團隊溝通問題,或者一個普通的過程問題。遷移版本從序列號更改爲時間戳,以避免開發人員A和B使用相同版本創建遷移的問題。

爲了避免遷移衝突:

  • 始終保持球隊的循環,當談到創作遷移。這應該避免所有問題。
  • 在檢查代碼更改回共享主repo之前,始終從存儲庫中提取並測試遷移(並運行測試套件)。這是一個應該始終遵循的安全網。

現在你的情況是這樣的:

  1. 開發人員A創建了上午9:00
  2. 開發人員B一個新的遷移文件時間戳創建了10:00
  3. 另一個新的遷移文件時間戳
  4. 開發人員B從存儲庫中取出。意識到沒有新的變化,遷移日期爲10:00 am在上午11:00
  5. 開發人員從存儲庫中拉取,運行遷移和測試套件,解決所有衝突並在上午11:30將其壓入存儲庫(確定,也許11:35)。

從不無法確定您的更改不會導致衝突或中斷生成,而是推送到共享倉庫。

+1

我認爲這不是一個過程問題,但缺乏內置檢查,不會發生問題。使用普通文件的版本控制,當您更新並出現衝突時會出現錯誤。有了足夠的開發人員和足夠複雜的模式,這可能無法擴展。想象一下,您不必檢查一次檢查,但需要檢查幾十次。這是不太可能的情況,但這是我所關心的。 儘管如此,這對於小團隊來說可能是一個很好的方法,所以我對此進行了投票。 –

+1

恕我直言遷移比我見過的其他任何東西都要好。您通常如何跟蹤和管理團隊中的數據庫更改?會不會有更多的支票?當然......但這幾乎是SCM的一個插件,可以檢測和處理這些衝突。 – txwikinger

0

我們總是創建一個bootstrap rake任務。此任務會丟棄開發數據庫,​​依次運行所有遷移,然後使用僞造測試數據填充它。

除了要使用應用程序中的大量內容之外,還必須運行所有遷移。如果你在提交你的東西之前這樣做了,那麼你確定所有的遷移都可以用於其他人。