2013-08-20 94 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 

希望它应该工作