2013-05-26 48 views
20

嗨im當前學習導軌,並遵循教程。說明是在創建應用程序後編輯遷移文件,然後運行rake db:migrate,然後使用rake db:create。新的導軌,設置數據庫然後運行耙db:創建/遷移

我已經編輯遷移文件到這一點:

class CreateUsers < ActiveRecord::Migration 
    def change 
    create_table :users do |t| 
     t.string :username 
     t.string :email 
     t.string :encrypted_password 
     t.string :salt 
     t.timestamps 
    end 
    end 
end 

然後當我運行「耙分貝:遷移」我得到一個錯誤

Mysql2::Error: Table 'users' already exists: CREATE TABLE `users` ... 

我應該後運行「耙分貝:創建」,然後即時得到這個

user_auth_development already exists 
user_auth_test already exists 
+0

我是否需要運行的db:創建和db:遷移?或者一旦我編輯了遷移文件,這是否可以安裝? –

+0

這意味着表格已經存在。可能是以前的遷移已經創建它。 –

回答

43

您運行rake db:create一次且僅一次,並運行它冷杉噸。然後,每次添加/更改遷移時,都會運行rake db:migrate。您已經運行了此遷移,或者您正在指向已存在的數據庫並已包含名爲users的表。我的猜測是你已經進行了一次遷移,在這種情況下你可能很好。如果你想覈實數據庫並重新開始,請執行rake db:drop db:create db:migrate

+0

謝謝!這解決了它。 –

+0

非常感謝!我不知道他們爲什麼不在導遊中介紹這一點。它也沒有解釋如何正確地更新遷移。當我更新遷移文件並運行'rake db:migrate'時,什麼都不會發生。我知道我做錯了什麼,但我不知道該怎麼做。我是否必須爲遷移提供新名稱或其他內容? – Nathan

+0

一般而言,您不應該修改遷移文件。如果你真的知道你在做什麼,你會知道什麼時候可以接受。如果您有任何疑問,請勿修改;相反,創建一個新的遷移文件('rails generate migration')。這裏有一個小例外:如果你想修改最近的遷移,你可以這樣做,然後運行'rake db:migrate:redo',這將刪除並重新運行上一次遷移。這並不總是可能的;這取決於最後一次遷移是否可逆(並非全部都是)。如果您已將其提交給共享存儲庫,則不應該這樣做。 –

15

我們可以簡單地給予,它會做所有的rake任務,其需要的數據庫創建和遷移

rake db:setup

+0

這對我來說不起作用......它表示模式文件還不存在...... –

+0

一直在尋找那麼簡單的信息......看起來很容易找到它。它將從模型生成數據庫。 – nembleton