2012-09-17 36 views
3

我是Ruby On Rails的新手,我使用的是Rails 3.2.7版本。rake db:migrate實際上會做什麼?

On Rails的教程它提到「在命令行,如果你運行‘耙分貝:遷移’,你的數據庫將會升級到最新的版本。」

有誰請澄清我這些問題?

  1. 這是什麼意思「你的數據庫將被升級到最新版本」(我使用MySQL 5,我已經創造了它3個數據庫的Rails開發,測試和生產)

  2. 用什麼數據將我的數據庫升級?

  3. 我手動創建了這3個數據庫,並將它們配置在database.yml文件中。運行耙db:遷移是強制性的?

回答

4

3)運行db:migrate並非強制要求。只需將數據庫中的表名映射到應用程序中的Model Name,我們就可以訪問應用程序中表的所有屬性。遷移被使用,以便我們可以在我們的應用程序中管理我們的表和數據庫(不需要去mysql終端創建一個表及其屬性)。通常當一個應用程序正在開發時,它的數據庫結構會隨着時間的推移而改變,這就是當我們使用我們的遷移來改變表的結構而不去mysql終端時,以及當我們從開發移植到生產時。我們不需要坐下來重新創建整個數據庫結構。它已經在我們的遷移,我們只需運行分貝:遷移生產模式

2)我不知道(太我所知舊數據將盡可能地保留)

1)假設在第一次我的遷移和相應的模型說我只有5個屬性,我運行一個數據庫:遷移並獲得MY數據庫中的表,經過幾天的開發,我發現我需要8個屬性。然後,我在遷移文件和模型中更改結構,然後再運行db:migrate,然後我的數據庫表結構將更新爲三個新屬性。

+0

感謝Abhay提供了很好的解釋。 – Pawan

+0

感謝您的投票.. –

1

參考this

Rails提供了一套rake任務與歸結爲運行特定組遷移的遷移工作。

您將使用的第一個與遷移相關的rake任務可能會是rake db:migrate。在其最基本的形式中,它僅運行尚未運行的所有遷移的升級或更改方法。如果沒有這種遷移,它就會退出。它將根據遷移日期依次運行這些遷移。

請注意,運行db:migrate還會調用db:schema:dump任務,該任務將更新您的db/schema.rb文件以匹配數據庫結構。

如果您指定目標版本,則Active Record將運行所需的遷移(向上,向下或更改),直到它達到指定的版本。版本是遷移文件名的數字前綴。例如,遷移到版本20080906120000運行

$ rake db:migrate VERSION=20080906120000 

如果版本20080906120000比當前版本(即,它被向上遷移)時,這將運行在所有遷移直到幷包括20080906120000 up方法,和將不會執行任何稍後的遷移。如果向下遷移,這將在所有向下遷移的方法上運行down方法,但不包括20080906120000.

+0

Salil,正如您所提到的「運行db:migrate也會調用db:schema:dump任務,它將更新您的db/schema.rb文件以匹配數據庫的結構。你能告訴我什麼來源它會更新數據庫?我的意思是什麼現有的數據庫結構,它會更新? – Pawan

+0

在你的數據庫中將會有版本表....假設你有100個遷移,比如遷移運行到100th版本,那麼你有100個遷移,那麼你的數據庫的版本表有100行....並且下次你創建一個遷移時,運行命令rake db:遷移它將檢查最大版本並在該版本之後運行遷移 – Salil

相關問題