2015-10-17 128 views
2

我想知道是否需要在Ruby on Rails中運行遷移以使模型正常工作。是否需要在Ruby on Rails中遷移數據庫?

我真的很喜歡使用MySQL Workbench設計數據庫,它提供了一個導出選項,可以在後期輕鬆創建數據庫,所以我想知道從Rails「遷移」數據庫是否真的使模型變得有些東西,比如讓他們知道表存在或類似的東西。

我在問這個,因爲當我運行rake db:migrate時,在db文件夾中創建一個新文件:schema.rb與數據庫的信息。

隨着更多的信息,我使用這些版本:

  • 紅寶石 - 紅寶石2.1.5p273(2014-11-13修訂48405)I386-的mingw32]
  • Ruby on Rails的 - 的Rails 4.2 .4

謝謝。

+0

當你運行'rake db:migrate'時,你的數據庫模式被更新。如果不運行遷移,屬性將不會添加到您的模式中,因此在實際數據庫中將不可用。您可以在應用程序目錄中的'db/schema.rb'中查看架構。 – sugaryourcoffee

回答

3

Rails不會強制您使用遷移。如果你沒有定義遷移,但以其他方式定義你的數據庫,那麼所有東西都可以正常工作。

如果您定義了遷移,那麼Rails會跟蹤它們是否已經運行(在第一次運行遷移時,Rails會爲此創建一個新的數據庫表,schema_migrations),並且抱怨如果你還沒有運行它們。如果你不打算使用遷移,那麼在db/migrations中沒有任何東西。

您仍然可以從現有數據庫生成schema.rb,只需運行bundle exec rake db:schema:dump即可。但是,運行的Rails應用程序不使用schema.rb文件,如果您還沒有schema.rb,Rails也可以正常工作。 AR模型通過從應用程序啓動時的數據庫實時獲取數據庫表的信息,但他們沒有從schema.rb中獲取它。但是schema.rb對於在新數據庫中重新創建模式很有用(即使不使用遷移,但是可以轉儲schema.rb,仍然可以使用它來重新創建相同的模式)。

遷移非常有用,大多數Rails都喜歡它們。它們可以讓您跟蹤git中控制的源代碼中db數據庫模式的變化,並且可以及時回滾或前進到其他數據庫模式點。您還可以使用遷移來實際修改數據,而不僅僅是模式,並且仍然準確記錄您在遷移中執行的修改/遷移數據的操作。如果不止一個開發人員在代碼上進行協作,遷移尤其(但不僅僅是)有用,因爲您可以更輕鬆地合併模式更改,因爲它們在源代碼中作爲遷移進行跟蹤。

遷移生成的模式更改也爲您處理一些rails約定,例如默認創建名爲id的主鍵,並且如果您要求創建標準Rails updated_at或created_at列,

但是,如果你不想使用遷移,你不必,Rails將會非常高興。

+0

謝謝你,這是一個明確的答案,非常有用。 –

0

如果您自己構建數據庫,沒有理由創建遷移文件和db:migrate。不過,讓Rails做到這一點是有好處的。一個是Rails期望一個特定的結構,如果你這樣做,你會手動複製它。此外,如果您決定移植到postgresql或其他數據庫,Rails可以使用它現在用於mysql的相同模式爲您構建它。

+0

爲什麼要選擇MySQL上的PostgreSQL? –

+0

我並不是想暗示你應該遷移,只是如果你決定移植到另一個數據庫,它變得更容易。對困惑感到抱歉! –

+0

好吧,我明白了,謝謝 –

2

使用遷移系統中的Rails的主要原因是架構...

enter image description here

這是位於db/schema.rb,基本存儲列數據庫中的每個表。

除了明顯的恢復類似rake db:schema:load(刪除所有數據)的數據庫的能力之外,該架構還具有爲您添加/附加到基準的額外好處。

很多人甚至不看他們的Rails數據庫 - 如果你這樣做的話,那太棒了。你應該做的重點是確保你的桌子儘可能高效和多功能;許多人的桌子都是一團糟。

+0

您可以創建schema.rb文件而無需使用遷移。 'rake db:schema:dump' – jrochkind

相關問題