表上的索引名称不存在

时间:2017-07-03 07:32:42

标签: ruby-on-rails ruby database-migration grape

我正在使用Ruby和葡萄。我创建了一个迁移文件来生成模型。当我运行迁移文件时,没有抛出任何错误,但未创建模型。所以我试着回滚。由于模型没有退出它再次抛出错误。

    class CreatePaymentFortumoInstruments < ActiveRecord::Migration
      def change
        create_table(:payment_fortumo_instruments, id: false) do |t|
          t.primary_key :id, :uuid
          t.string :consumer_id, null: false
          t.string :product_code, null: true, default: nil
          t.string :partner, null: false
          t.string :aasm_state, null: false
          t.datetime :issued_at, null: true
          t.datetime :activated_at, null: true
          t.datetime :deactivated_at, null: true
          t.timestamps
       end

       add_index :payment_fortumo_instruments, :id
      add_index :payment_fortumo_instruments, :consumer_id
    end
   end

和回滚时抛出的错误

    == 76 CreatePaymentFortumoInstruments: reverting 
   ==============================
   -- remove_index(:payment_fortumo_instruments, 
   {:column=>:consumer_id})
   rake aborted!
  StandardError: An error has occurred, this and all later migrations 
  canceled:

 Index name ‘index_payment_fortumo_instruments_on_consumer_id’ on table 
 ‘payment_fortumo_instruments’ does not exist
 /opt/icflix/billing-v2/Rakefile:53:in `block (2 levels) in <top 
 (required)>'
 ArgumentError: Index name 
 ‘index_payment_fortumo_instruments_on_consumer_id’ on table 
 ‘payment_fortumo_instruments’ does not exist
 /opt/icflix/billing-v2/Rakefile:53:in `block (2 levels) in <top 
  (required)>'
 Tasks: TOP => db:rollback
 (See full trace by running task with --trace)

如何再次运行相同的迁移文件并创建模型。我不想为此创建新的迁移文件。

1 个答案:

答案 0 :(得分:1)

如果您搞砸了迁移并且它是本地数据库,那么最简单的方法就是删除数据库并再次运行迁移。

如果您的最新迁移正确更新了架构,则可以运行rake db: reset,这将重新创建数据库,然后从架构加载。

但可以肯定的是,我建议重新运行迁移:db:migrate:reset,它将重新创建数据库,然后运行迁移。