2012-02-10 34 views
5

我正在更新Rails 1.2.3應用程序到3.2.1。從Rails 1.2.3應用升級時如何更新遷移?

我想弄清楚如何更新遷移結構以與最新版本的Rails兼容,因此,理想情況下,您可以在設置應用程序時運行rake db:migrate。目前,我已經通過執行rake db:migrate:up VERSION=[version_number]來解決這個問題。如果我只運行rake db:migrate,它會嘗試從頭開始重新運行所有遷移,並停止運行(因爲這些遷移已在db dump中運行過)。

應用中的遷移看起來像這樣001_add_some_model.rb,002_add_some_other_model.rb而不是20120209182512_add_some_model.rb

有沒有人有這方面的經驗?我怎樣才能解決這個問題?

+6

哇從1.2.3到3.2.1。祝你好運... – lucapette 2012-02-10 14:35:57

+0

@lucapette謝謝!這已經完成了很多,我只是想讓遷移更自然。 – jfedick 2012-02-10 14:38:54

+0

我經常見到的解決方案是「刪除遷移並創建一個新的起點」 – lucapette 2012-02-10 14:39:47

回答

7

我認爲你應該重新啓動你的遷移,放棄你所有的遷移,並創建一個新的遷移與當前模型的定義。作爲起始示例,請參見this migration

2

不建議運行所有遷移建立一個新的數據庫即使在多達最新的Rails 3應用程序。這是在DB/schema.rb解釋說:

注意,這schema.rb定義是你的 數據庫架構的權威來源。如果您需要創建另一個 系統應用程序數據庫,您應該使用DB:架構:負載,沒有運行所有的遷移 從頭開始。後者是一種有缺陷和不可持續的方法(您將積累更多的遷移數據,其運行速度越慢,發生問題的可能性越大)。

0

而不是做了哪些建議,我會從頭開始創建新的遷移。 在當前狀態下啓動所有模型,併爲每個模型創建新的遷移,這樣,以後您仍然可以使用遷移的強大功能,例如向列中添加列或更改列類型。

如果創建了所有車型,like has been suggested你會失去在遷移名稱型號軌道燒毛遷移。

這只是另一種方式來做到這一點,反映了我自己的視野。