2013-10-16 62 views
7

我在git上有幾個分支,跨這些分支的模式在不同的版本上。 如果我切換到分支可以說new_feature(等待遷移),如果我做rake db:setup那麼它建議我運行待定遷移。rake db:用刪除的表遷移更新的schema.rb

一旦我這樣做,我的模式得到更新與表被刪除在同一分支。

如果我做rake db:reset那麼它工作正常。

我知道db:setupdb:reset之間的區別。 後來一個做db:drop然後db:setup

但是很奇怪,爲什麼架構顯示了那些掉在rake db:migrate

上午表肯定是缺少一些軌道知識w.r.t.模式加載和遷移過程

任何見解都會有很大的幫助。在此先感謝

回答

5

這聽起來像你的schema.rb檢入到git中,這是一件好事。所以當你切換分支時,你的schema.rb與你的實際數據庫模式不同。

rake db:migrate將只檢查schema.rb中的模式版本,如果數據庫版本是,則更年輕的,那麼它將運行所有「未決」遷移。如果運行遷移,它只會重新生成schema.rb文件。

如果您的實際架構的版本高於schema.rb中報告的版本,則它執行唯一安全的事情,這是無關緊要的。基本原理是,可能沒有遷移文件使其更新,或者數據庫操作可能會強制重新創建表格/截斷或同樣令人討厭的東西。還有其他邊緣案例的不匹配版本,但我認爲你明白了。

因此,如果要保留分支之間的數據,您有幾個選項可用於遷移思路。

答:分支機構之間需要的任何數據都保存在db種子文件中。那麼你可以放棄/創建你的分貝沒有任何顧慮

B)切換分支之前回滾遷移是不同的。在新的分支中,他們再次前進。

C)作弊,並刪除schema.rb並重新運行rake db:migrate。這是作弊的,因爲它很容易在你的版本控制中導致數據丟失,不穩定的schema.rb,並且讓其他團隊成員頭疼,因爲你的遷移沒有任何意義。

和一個建議的話。如果您已將其提交給git,請不要更改舊的遷移文件。只是做一個新的。它們形成了一個邏輯堆棧,並且旨在順序地改變你的模式。