2011-02-14 28 views
1

我有Rails應用程序,每隔一段時間,當我攜帶新開發人員時,他們都感嘆他們應該能夠通過運行整個遷移歷史記錄,在其開發環境中生成當前數據庫模式。我個人認爲遷移不是您模式的權威來源。現在我們所做的就是將數據庫的生產副本與當前模式一起加載到開發機器上。而且,從那裏,架構可以通過增量遷移來維護。Rails - 數據庫模式的權威來源?

所以我的問題是:

  • 你是什麼模式對Rails項目的權威來源?
  • 現在認爲維護數據庫模式的最佳實踐方法是什麼?

回答

6

我不認爲遷移是您的模式的權威來源。遷移功能非常強大,但是可選。有些開發人員使用替代工作流程,尤其是在DBA堅持強大的參照完整性和DBMS強制約束的環境中。我建議查看RoR官方移民指南以獲取更多信息。 db/schema.db(或db/{env}_structure.sql)文件是您的架構的權威來源。許多開發人員會在項目變老時清除舊的遷移,因此運行每個遷移不一定會生成工作數據庫。經歷數百次遷移也需要很長時間。 Rails使用schema.db(或sql轉儲文件)來構建測試數據庫,當然,在運行rake db:setup時,這是爲您的應用程序創建新數據庫的推薦方式。

底部像是rake db:setup應始終生成一個工作數據庫,無論遷移。開發人員可以使用它創建新的環境,Rails使用它來運行測試。

http://guides.rubyonrails.org/migrations.html#schema-dumps-and-source-control

1

正常情況下,運行所有遷移的繼承應該會產生您的實際數據庫模式(如果情況並非如此,那麼您沒有正確使用遷移*)。

另一種方法是複製schema.rb(在遷移時創建/更新),rake db:setup使用該模式,並應生成您在生產中的模式的精確副本(除非您再次沒有正確使用遷移*)。

然後,如果你需要「樣本數據」,你可以使用db/seeds.rb文件插入它,其中包含可以訪問你的模型的ruby代碼,從而創建並保留新實體&等等......

*:在某些情況下,您不能以「常用」方式將所有數據庫更改置於遷移中(這種情況很少見,應儘可能避免)......但這些應該包含在遷移中普通的SQL執行語句),或者需要在開發數據庫上手動進行更改......然後使用產品快照。有時候更方便。但是,我會再次勸阻。

+0

THX ...因此,如果這是我們沒有正確的使用我們的遷移的情況下,是真有任何一點固定?我的觀點是,通過拉取生產副本來設置初始模式,我們有一個方便的解決方法。雖然修改遷移可能使我們值得引用最佳實踐章節,但它不會幫助我們賺錢。 – keruilin 2011-02-14 15:18:50