・ Ruby: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ OS: macOS Catalina
When deploying with $ rails db: migrate
or Capistrano
An error occurs in the migration file of ʻacts-as-taggable-on` as shown below.
Terminal
StandardError: An error has occurred, all later migrations canceled:
Mysql2::Error: Cannot drop index 'index_taggings_on_tag_id': needed in a foreign key constraint: DROP INDEX `index_taggings_on_tag_id` ON `taggings`
20200525095250/db/migrate/20200516111153_add_missing_unique_indices.acts_as_taggable_on_engine.rb:11:in `up'
It seems that the cause is that the Gem creator is simply skipping. In short, this error will continue to appear for the rest of your life unless the Gem creator modifies the Gem itself to prevent this error.
ʻActs-as-taggable-on` of the migration file created at the time of installation, Comment out unnecessary code.
** * Pay attention to the file name! ** **
ruby:20200516111153_add_missing_unique_indices.acts_as_taggable_on_engine.rb
# This migration comes from acts_as_taggable_on_engine (originally 2)
if ActiveRecord.gem_version >= Gem::Version.new('5.0')
class AddMissingUniqueIndices < ActiveRecord::Migration[4.2]; end
else
class AddMissingUniqueIndices < ActiveRecord::Migration; end
end
AddMissingUniqueIndices.class_eval do
def self.up
# add_index ActsAsTaggableOn.tags_table, :name, unique: true
# remove_index ActsAsTaggableOn.taggings_table, :tag_id if index_exists?(ActsAsTaggableOn.taggings_table, :tag_id)
# remove_index ActsAsTaggableOn.taggings_table, name: 'taggings_taggable_context_idx'
# add_index ActsAsTaggableOn.taggings_table,
# [:tag_id, :taggable_id, :taggable_type, :context, :tagger_id, :tagger_type],
# unique: true, name: 'taggings_idx'
end
def self.down
# remove_index ActsAsTaggableOn.tags_table, :name
# remove_index ActsAsTaggableOn.taggings_table, name: 'taggings_idx'
# add_index ActsAsTaggableOn.taggings_table, :tag_id unless index_exists?(ActsAsTaggableOn.taggings_table, :tag_id)
# add_index ActsAsTaggableOn.taggings_table, [:taggable_id, :taggable_type, :context], name: 'taggings_taggable_context_idx'
end
end
ruby:20200516111155_add_missing_taggable_index.acts_as_taggable_on_engine.rb
# This migration comes from acts_as_taggable_on_engine (originally 4)
if ActiveRecord.gem_version >= Gem::Version.new('5.0')
class AddMissingTaggableIndex < ActiveRecord::Migration[4.2]; end
else
class AddMissingTaggableIndex < ActiveRecord::Migration; end
end
AddMissingTaggableIndex.class_eval do
def self.up
# add_index ActsAsTaggableOn.taggings_table, [:taggable_id, :taggable_type, :context], name: 'taggings_taggable_context_idx'
end
def self.down
# remove_index ActsAsTaggableOn.taggings_table, name: 'taggings_taggable_context_idx'
end
end
Recommended Posts