Closed denmarkmeralpis closed 3 years ago
Yes, it's a problem I remove
add_index ActsAsTaggableOn.taggings_table, :tag_id
in acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb
file to resolve the problem
I created a PR for this, you have top remove the foreign key prior to removing the index.
@robotzhang @ndrix
Can you guys shed a little bit more light on this issue? What causes it exactly? Is this a problem for a particular version of rails or for all of them? What does the solution mean?
+1
+1
+1
Can be fixed with https://github.com/mbleigh/acts-as-taggable-on/pull/983/commits/494532361964d5edb7010c91e0a944c572cba439 and by re-enabling it at the end of the migration
add_foreign_key ActsAsTaggableOn.taggings_table, ActsAsTaggableOn.tags_table, column: 'tag_id'
Closing this issue!
Still happening to me in:
acts-as-taggable-on (7.0.0)
Can confirm, following the install instructions in the Readme on a 6.1 project with MySQL
== 20210725152648 ActsAsTaggableOnMigration: migrating ========================
-- create_table(:tags, {:options=>"ENGINE=InnoDB", :id=>:integer})
-> 0.0147s
-- create_table(:taggings, {:options=>"ENGINE=InnoDB", :id=>:integer})
-> 0.0306s
-- add_index(:taggings, :tag_id)
-> 0.0199s
-- add_index(:taggings, [:taggable_id, :taggable_type, :context], {:name=>"taggings_taggable_context_idx"})
-> 0.0297s
== 20210725152648 ActsAsTaggableOnMigration: migrated (0.0953s) ===============
== 20210725152649 AddMissingUniqueIndices: migrating ==========================
-- add_index(:tags, :name, {:unique=>true})
-> 0.0342s
-- index_exists?(:taggings, :tag_id, {:name=>"index_taggings_on_tag_id"})
-> 0.0025s
-- remove_index(:taggings, :tag_id, {:name=>"index_taggings_on_tag_id"})
rake aborted!
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
/Users/chaos/.gem/ruby/2.7.2/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query'
/Users/chaos/.gem/ruby/2.7.2/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query'
/Users/chaos/.gem/ruby/2.7.2/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt'
/Users/chaos/.gem/ruby/2.7.2/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:206:in `block (2 levels) in execute'
/Users/chaos/.gem/ruby/2.7.2/gems/activesupport-6.1.3.2/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/Users/chaos/.gem/ruby/2.7.2/gems/activesupport-6.1.3.2/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/Users/chaos/.gem/ruby/2.7.2/gems/activesupport-6.1.3.2/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:205:in `block in execute'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract_adapter.rb:696:in `block (2 levels) in log'
/Users/chaos/.gem/ruby/2.7.2/gems/activesupport-6.1.3.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
/Users/chaos/.gem/ruby/2.7.2/gems/activesupport-6.1.3.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/Users/chaos/.gem/ruby/2.7.2/gems/activesupport-6.1.3.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/Users/chaos/.gem/ruby/2.7.2/gems/activesupport-6.1.3.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/Users/chaos/.gem/ruby/2.7.2/gems/activesupport-6.1.3.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract_adapter.rb:695:in `block in log'
/Users/chaos/.gem/ruby/2.7.2/gems/activesupport-6.1.3.2/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract_adapter.rb:687:in `log'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:204:in `execute'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/mysql/database_statements.rb:50:in `execute'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract/schema_statements.rb:883:in `remove_index'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:929:in `block in method_missing'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:897:in `block in say_with_time'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:897:in `say_with_time'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:918:in `method_missing'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration/compatibility.rb:263:in `remove_index'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:658:in `method_missing'
/Users/chaos/code/_private/soundtag/db/migrate/20210725152649_add_missing_unique_indices.acts_as_taggable_on_engine.rb:11:in `up'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:830:in `up'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:870:in `public_send'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:870:in `exec_migration'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:851:in `block (2 levels) in migrate'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:850:in `block in migrate'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:462:in `with_connection'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:849:in `migrate'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1037:in `migrate'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1329:in `block in execute_migration_in_transaction'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1382:in `ddl_transaction'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1328:in `execute_migration_in_transaction'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1302:in `each'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1302:in `migrate_without_lock'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1251:in `block in migrate'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1401:in `block in with_advisory_lock'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1416:in `block in with_advisory_lock_connection'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:462:in `with_connection'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1416:in `with_advisory_lock_connection'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1397:in `with_advisory_lock'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1251:in `migrate'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1086:in `up'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/migration.rb:1061:in `migrate'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/tasks/database_tasks.rb:237:in `migrate'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/railties/databases.rake:92:in `block (3 levels) in <main>'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/railties/databases.rake:90:in `each'
/Users/chaos/.gem/ruby/2.7.2/gems/activerecord-6.1.3.2/lib/active_record/railties/databases.rake:90:in `block (2 levels) in <main>'
/Users/chaos/.gem/ruby/2.7.2/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/lib/bundler/cli/exec.rb:63:in `load'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/lib/bundler/cli/exec.rb:63:in `kernel_load'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/lib/bundler/cli/exec.rb:28:in `run'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/lib/bundler/cli.rb:494:in `exec'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/lib/bundler/cli.rb:30:in `dispatch'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/lib/bundler/cli.rb:24:in `start'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/exe/bundle:49:in `block in <top (required)>'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/lib/bundler/friendly_errors.rb:130:in `with_friendly_errors'
/Users/chaos/.gem/ruby/2.7.2/gems/bundler-2.2.17/exe/bundle:37:in `<top (required)>'
/Users/chaos/.gem/ruby/2.7.2/bin/bundle:23:in `load'
/Users/chaos/.gem/ruby/2.7.2/bin/bundle:23:in `<main>'
Same happened for me on Rails 7.1, acts-as-taggable-on 10.0.0, MariaDB 11.4.2. The migrations work fine on PostgreSQL and SQLite, so this is a MariaDB/MySQL specific thing.
Fixed with @ndrix and @mrillo's method of removing and re-enabling. Seems like the generator should perhaps combine those two migrations into one so that the second doesn't immediately have to alter the first?
I guess t.references :tag, foreign_key: {to_table: ActsAsTaggableOn.tags_table}
in ActsAsTaggableOnMigration
automatically creates an FK constraint on MySQL, whereas it doesn't get added unless done explicitly on the other two?
I got an error while running
rails db:migrate
. I'm using rails 5.2 and ruby 2.5.3Here's the log