2011-11-08 25 views
1

這是一個新手問題。遷移(rake db:migrate)是否具有在開發過程中使用的某些功能,或者它是嚴格意義上的數據庫最新生產工具?Rails中的遷移工作如何?

回答

1

理想情況下,您希望僅在開發過程中使用遷移,然後加載模式並在生產中對數據庫進行種子處理。實際上,他們將允許您進行一些更改,然後部署到生產中,而不會造成任何損害。

遷移允許您在迭代中工作,即使在您的數據庫上也是如此。你不必擔心忘記添加一些東西。當你開始的時候,只要按照你認爲正確的方式創建表格,稍後你可以用另一個遷移來修復它。這基本上是這個想法。它帶走了一個db腳本統治他們所有的種事情。

一個小例子,如果你有一個用戶名和密碼的用戶模型,你需要添加一個電子郵件字段,只要做到這一點

rails generate migration AddEmailToUser # this is a convention, but you can name it however you want 

class AddEmailToUser < ActiveRecord::Migration 
    def change 
    add_column :users, :email, :string 
    end 
end 

change方法是雙向的,當你申請遷移,還有當你需要恢復時。這是一個整潔的Rails 3.1魔術。

版本的遷移是這樣

class AddEmailToUser < ActiveRecord::Migration 
    def up 
    add_column :users, :email, :string 
    end 

    def down 
    remove_column :users, :email 
    end 
end 

一旦你添加的遷移,只需運行rake db:migrate,一切都應該工作得很好。遷移的一大優勢是,如果你手動弄亂你的數據庫,你可以很容易地只是做

rake db:drop 
rake db:create 
rake db:migrate 

rake db:migrate:reset # this might not work if you messed up your migrations 

和你有數據庫的正確版本創建

+0

我無法掌握它。不知何故,我使用它是錯誤的,因爲當我添加更多列時,它不斷告訴我表中已經存在一些列。你能指引我到哪裏我可以閱讀如何使用遷移? – Roman

+0

@Am。看看導軌http://guides.rubyonrails.org/migrations.html –

0

遷移跟蹤數據庫模式的變化。所有更改(重命名列,更改表格,添加索引等)都應通過遷移完成。多虧了這一點,可以很容易地在多個生產服務器上部署更改。