2013-11-21 72 views
13

如果模式穩定,是否允許刪除(或歸檔)Rails應用程序中的舊遷移文件?在Rails應用程序中刪除舊的遷移文件

我的遷移很多,我懷疑在那裏可能會有一些問題,因爲我偶爾在Heroku上遷移數據庫時遇到問題。

+2

可能重複?](http://stackoverflow.com/questions/4248682/is-it-a-good-idea-to-purge-old-rails-migration-files) – brainimus

回答

18

您不需要在Rails應用程序中保留舊的遷移文件,因爲您的數據庫模式應該在schema.rb或可用於重新生成模式的等效SQL文件中捕獲。

遷移不是數據庫模式的權威來源。該角色落在db/schema.rb或Active Record通過檢查數據庫生成的SQL文件中。它們不是爲編輯而設計的,它們只是表示數據庫的當前狀態。

通過重播整個遷移歷史記錄,不需要(也很容易出錯)部署應用程序的新實例。只需在數據庫中加載schema.rb或SQL文件中當前模式的描述就簡單得多。
該文件應該版本化並保存在源代碼管理中。

要設置自動生成schema.rb,請通過config.active_record.schema_format設置修改config/application.rb,該設置可能是:ruby或:sql。 如果:ruby被選中,那麼模式存儲在db/schema.rb中。 如果:選擇了sql,模式將以您的數據庫的原生SQL格式 轉出。

+5

這是絕對正確的。一個警告:遷移可以用來影響數據庫的_content_,而不是_structure_。例如,你可能有SQL轉換數據(也許正常化,轉換爲小寫或大寫等)。另一個用途是某些清理任務(刪除舊記錄,更正數據創建中較早的邏輯錯誤等)。最後,應該在'seeds.db'中完成的東西有時是在遷移中完成的。這種遷移的使用是否正確*是另一個問題 - 只是注意你應該小心。 –

+0

舊遷移文件應該做什麼?簡單地刪除它們感覺不對。 – wbeange

+1

不同意@TomHarrisonJr,因爲這些東西應該「有時在遷移中完成」 - 這些SQL約束,觸發器,存儲過程等不應該依賴於遷移文件。相反,'config.active_record.schema_format'應該是':sql',_OR_,覆蓋'rake:db:setup'任務來運行定義這些事情的後續SQL命令(那個活動記錄/ schema.rb不能)。我同意所有其他說:)。 – Todd

0

您可以刪除舊的遷移。你這樣做了以後,當你設置你的應用程序,你需要運行:

rake db:schema:load 

相反的:

rake db:migrate 
的[這是個好主意,清除舊的Rails遷移文件