在heroku db失败后要做什么:回滚

时间:2014-04-19 09:25:21

标签: ruby-on-rails heroku migration rollback

我在使用heroku作为部署工具学习rails的最初阶段。我今天遇到了一些问题,现在已经解决了,但是我想知道是否有一个正确/更好的方法来做我做的事情。

我的问题如下:我写了一个迁移文件,创建了一个包含一些索引的表(使用add_index)。代码如下所示:

class DeviseCreateUsers < ActiveRecord::Migration
  def change
    create_table(:users) do |t|
      t.string :username
      ...
    end
    add_index :users, :username,     :unique => true
  end 

  def self.down
    drop_table(:users)
    remove_index :users, :username
  end 
end

heroku run rake db:migrate运行正常但heroku run rake db:rollback失败因为(我假设)remove_index试图从已删除的列中删除索引。 < / p>

然后我在迁移文件中添加了self.down方法(在删除表之前删除了索引)。之后,heroku run rake db:migrate没有做任何事情,而heroku run rake db:rollback仍然遇到与以前相同的错误。重置数据库或丢弃表格也不起作用。在最终回滚之前,我最终删除了迁移中的add_index

...不幸的是,我不再知道为什么db:rollback失败了。错误消息是'index_users_on_username' on table 'users' does not exist',所以我的猜测是我在执行回滚之前做了一些愚蠢的事情,比如修改数据库或修改了迁移文件。或者可能是因为我在同一个迁移文件中混合使用change和down方法?

无论如何,我的主要问题是,如果db:rollback失败,那么呢?

我头脑中有一些选择:

  1. 修复迁移文件,直到回滚工作
  2. 手动修复数据库,直到回滚工作
  3. 手动修复数据库并完全忽略迁移(不知道如何执行此操作) 此)
  4. ???

0 个答案:

没有答案