2013-08-20 171 views
2

貫穿Michael Hartl着名的Rails教程,擊中了這個障礙。Rake db:遷移不會忽略舊的遷移?

我有這樣的一個遷移文件,通過rails generate model等創建:

class CreateUsers < ActiveRecord::Migration 
    def change 
    create_table :users do |t| 
     t.string :name 
     t.string :email 

     t.timestamps 
    end 
    end 
end 

後來,我加入這個第二遷移文件:

class AddIndexToUsersEmail < ActiveRecord::Migration 
    def change 
    add_index :users, :email, unique: true 
    end 
end 

要嘗試和更新數據庫以包括新其中一個,我按照說明運行了rake db:migrate,但是這給了我一個錯誤,告訴我我試圖創建一個已經存在的表,也就是說我明顯錯過了一些東西。

我是......應該刪除第一次遷移?這沒有任何意義。該怎麼辦?

(這些db/migrate下的唯一文件)

+0

它像你期望的那樣。第一次遷移時是否遇到任何其他錯誤?不知何故,遷移沒有被標記爲在數據庫中運行。這不應該發生。 –

+0

我沒有得到任何其他錯誤,但我一直在弄清楚這一點,儘管我試圖保持完美的軌跡,我可能錯過了一些東西,並導致這種不經意間。是刪除模型並重新開始的唯一解決方案? – Aerovistae

+0

像Alex提到的,這不應該發生。你可以'grep「create_table:users」db/migrate/*'來確保沒有兩次意外創建表遷移,就像一個完整性檢查一樣? – kikuchiyo

回答

1

如果你真的想看看遷移已經跑進了數據庫,你可以檢查你的應用程序數據庫中,有一個表叫schema_migrations,在那裏你可以請參閱每個遷移的唯一標識,例如您的遷移稱爲:20130402190449_add_flagand_table.rb,您應該看到該表中的一行爲20130402190449,希望我給您一些指導

+0

我還沒弄清楚如何檢查我的本地postgres數據庫呢......當我嘗試運行命令時,它告訴我我必須成爲超級用戶。所以,這裏沒有運氣。不過謝謝。 – Aerovistae

+0

你在運行什麼操作系統?你不能sudo你的命令嗎? –

+0

Windows:........( – Aerovistae

0

您可以做什麼是回滾遷移和重新運行。

您可以回滾遷移這樣

#rake db:rollback STEP=2 

,然後運行

#rake db:migrate 

希望它應該工作