【发布时间】:2017-10-25 15:14:06
【问题描述】:
因此,我正在与一位同事合作,他添加了一些额外的迁移文件,并且在我提取他们的版本后,按照正常程序运行 rails db:migrate。我最终得到以下错误:
Index name 'index_authorizations_on_user_id' on table 'authorizations' already exists
ArgumentError: Index name 'index_authorizations_on_user_id' on table 'authorizations' already exists
所以我去检查了架构并且表已经存在。那么为什么会失败呢?通常在过去它只在进行迁移时生成新的表条目/更新,那么为什么不忽略它呢?
我尝试回滚并获得: 此迁移使用 remove_columns,它不会自动可逆。
我尝试过 bin/rails db:migrate RAILS_ENV=development,但我得到了同样的错误。
我已经完成了 db:reset、db:drop,这一切都回到了我无法运行的挂起迁移的问题。我做错了什么?
他们添加了以下迁移:20171024074328_create_authorizations.rb
class CreateAuthorizations < ActiveRecord::Migration[5.1]
def change
create_table :authorizations do |t|
t.string :provider
t.string :uid
t.references :user, foreign_key: true
t.timestamps
add_index :authorizations, :user_id
add_index :authorizations, [:provider, :uid], unique: true
end
end
结束
【问题讨论】:
-
你会展示迁移吗?
-
添加了有问题的迁移文件
-
删除数据库应该会删除所有挂起的迁移。是否存在创建表和索引的早期迁移?
-
@TomAranda 删除数据库绝对是最后的手段,并且通常会导致更多问题(例如数据丢失或如果您备份-删除-恢复以避免丢失所有数据,则什么也不做)它解决了.
-
@muistooshort,公平点。我并不是要推荐那种做法,我也不推荐那种做法。但是,用户说他已经尝试过了,所以我很困惑为什么它不起作用。
标签: ruby-on-rails postgresql rails-activerecord rails-migrations