8991


RailsでDBのスキーマ変更をロールバックした際にエラーが発生し、ロールバックできません。

実行コマンド：

[code]

    $ bundle exec rake db:rollback
    
[/code]

エラーメッセージ：

[code]

    ==  RemoveIndexFromSite: reverting ======================================
    rake aborted!
    StandardError: An error has occurred, all later migrations canceled:
    
    remove_index is only reversible if given a :column option./Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration/command_recorder.rb:149:in `invert_remove_index'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration/command_recorder.rb:66:in `inverse_of'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration/command_recorder.rb:50:in `record'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration/command_recorder.rb:81:in `remove_index'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:625:in `block in method_missing'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:597:in `block in say_with_time'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:597:in `say_with_time'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:617:in `method_missing'
    /Users/xf-dev-mac02/app/db/migrate/20150410022329_remove_index_from_site.rb:3:in `change'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:569:in `block in exec_migration'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:458:in `block (2 levels) in revert'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration/command_recorder.rb:38:in `revert'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:458:in `block in revert'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:605:in `suppress_messages'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:457:in `revert'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:569:in `exec_migration'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:555:in `block (2 levels) in migrate'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:554:in `block in migrate'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:294:in `with_connection'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:553:in `migrate'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:709:in `migrate'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:959:in `block in execute_migration_in_transaction'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:1007:in `ddl_transaction'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:958:in `execute_migration_in_transaction'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:920:in `block in migrate'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:916:in `each'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:916:in `migrate'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:771:in `down'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:857:in `move'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/migration.rb:753:in `rollback'
    /Users/xf-dev-mac02/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/railties/databases.rake:126:in `block (2 levels) in <top (required)>'
    Tasks: TOP => db:rollback
    (See full trace by running task with --trace)
    
[/code]

元々ロールバックする前にnameカラムのユニーク制約を非ユニークにしようと以下のマイグレーションファイルを実行していました。

ロールバックする前に実行したマイグレーションファイル：

[code]

    class RemoveIndexFromSite < ActiveRecord::Migration
      def change
        remove_index :sites, name: 'name_index'
        add_index :sites, :name, unique: false, name: 'name_index'
      end
    end
    
[/code]

おそらく状態を元に戻せないエラーなのですが、エラーを解消する方法を知っている方がいましたら教えてください。


CC BY-SA 3.0
2015-04-10T05:04:46.180
8987
2015-04-10T05:38:04.673
8558
question
ruby ruby-on-rails mysql rails-activerecord rake
RailsでDBをロールバックした際のエラー「remove_index is only reversible ~」解消方法


> remove_index is only reversible if given a :column option.

と書かれている通りです。以下のようにカラムを明示すればロールバックできると思います。

[code]

    remove_index :sites, column: :name, name: 'name_index'
    
[/code]


CC BY-SA 3.0
2015-04-10T05:38:04.673
8991
2015-04-10T05:38:04.673
76
8987
answer