2012-04-12 132 views
7

自我的Rails應用開始以來,我創建了很多遷移項目。其中一些僅用於測試目的。我現在有很多完全沒用的遷移(例如:在遷移中創建一個表並將其放入下一個表中)。刪除過去的軌道遷移

由於schema.rb獲取更新一次db:migrate運行,是否可以刪除所有的遷移並從schema.rb的實際內容開始?

+1

您可以使用'rake db:schema:load' – 2012-04-12 11:40:43

+0

並刪除所有遷移文件? – Luc 2012-04-12 11:43:21

回答

8

是的,你可以(也可能應該)刪除舊的遷移。由於你的模型代碼將取決於你的模式的更新版本,所以你的舊遷移可能會失效。

因此,通過各種手段刪除遷移(你有他們的源代碼控制下,對吧?),並使用

rake db:schema:load 

如果你需要初始化一個新的數據庫。

UPDATE:Rails的指導現在有類似的東西說這個:http://guides.rubyonrails.org/active_record_migrations.html#schema-dumping-and-you

+0

使用'rake db:schema:load'而不是'rake db:migrate'? – methyl 2012-04-12 11:53:55

+0

編號'rake db:schema:load'轉儲您當前的數據庫並從'schema.rb'重新創建它。 'rake db:migrate'將任何未完成的遷移應用於現有的數據庫。 – Thilo 2012-04-12 11:54:54

+0

如果我擁有schema.rb的最後一個版本,爲什麼讓他們在源代碼控制中很重要?不應該是那個重要的人嗎? – Luc 2012-04-12 16:00:01

0

一個更好的方式來做到這一點是做到以下幾點...

當你到達你的項目的一個里程碑,並且您確定不希望在該版本的數據庫下遷移,您可以用一個遷移文件替換大量的遷移文件,然後您可以將其用作捆綁啓動的新「初始」遷移到目前爲止所做的一切。

之後:繼續在項目中使用遷移!

絕不要手動編輯您的schema.rb文件..並且永遠不會加載db/schema.rb文件,除非它是用於災難恢復之類的東西。

您沒有100%保證簽入版本控制的文件是最新版本,甚至是正確的版本。

上下遷移並將大量遷移捆綁到一個遷移文件中會更安全。

通過手動加載schema.rb文件,您完全繞過了遷移提供的安全網。這不是一個好主意。