Rake db:迁移不忽略旧的迁移?

时间:2013-08-20 01:20:57

标签: ruby-on-rails

贯穿Michael Hartl众所周知的Rails教程,点击这个障碍。

我在迁移文件中有这个,由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下的唯一文件)

3 个答案:

答案 0 :(得分:1)

如果您真的想看看哪些迁移已经进入数据库,您可以检查您的应用数据库,有一个名为schema_migrations的表,在那里您可以看到每个迁移的唯一ID作为一行,例如你的迁移被称为:20130402190449_add_flagand_table.rb,你应该看到数字20130402190449作为该表的一行,希望我给你一些指导

答案 1 :(得分:0)

您可以做的是回滚几次迁移并重新运行。

您可以像这样回滚迁移

#rake db:rollback STEP=2

然后运行

#rake db:migrate

希望它能够运作

答案 2 :(得分:0)

我的问题是我进行了倒数第二次迁移,并且在添加新迁移后尝试重新运行该迁移。

我最终只是注释掉了它试图重新运行的代码,然后运行了rake db:migrate,然后取消了对迁移代码的注释。

这样,架构不会中断,并且可以修复发生的任何错误。