我在使用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
失败因为(我假设) < / p> remove_index
试图从已删除的列中删除索引。
然后我在迁移文件中添加了。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
失败,那么呢?
我头脑中有一些选择: