Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Duplicate migration when migrating in Rails 3.2.20 #26

Open
h0jeZvgoxFepBQ2C opened this issue Nov 18, 2014 · 7 comments
Open

Duplicate migration when migrating in Rails 3.2.20 #26

h0jeZvgoxFepBQ2C opened this issue Nov 18, 2014 · 7 comments

Comments

@h0jeZvgoxFepBQ2C
Copy link

Hey,

I'm using the support-v2 branch, creating the migrations for a rails 3.2.20 app.

Creation works fine, but migrating doesnt work:
I dont use the queue-classic-later gem and there are no duplicate migrations with this names.. but i still get this exception:

Any hints?

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
[deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message.
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
rake aborted!
ActiveRecord::DuplicateMigrationNameError: Multiple migrations have the name AddIdToLater
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:637:in `block in migrations'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:629:in `map'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:629:in `migrations'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:734:in `migrations'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:685:in `migrate'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:570:in `up'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:551:in `migrate'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/railties/databases.rake:193:in `block (2 levels) in <top (required)>'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:240:in `call'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:240:in `block in execute'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:235:in `each'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:235:in `execute'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:179:in `block in invoke_with_call_chain'
/Users/myuser/.rvm/rubies/ruby-2.1.3/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:172:in `invoke_with_call_chain'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:165:in `invoke'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:150:in `invoke_task'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:106:in `block (2 levels) in top_level'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:106:in `each'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:106:in `block in top_level'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:115:in `run_with_threads'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:100:in `top_level'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:78:in `block in run'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:176:in `standard_exception_handling'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:75:in `run'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/bin/rake:33:in `<top (required)>'
/Users/myuser/.rvm/gems/ruby-2.1.3/bin/rake:23:in `load'
/Users/myuser/.rvm/gems/ruby-2.1.3/bin/rake:23:in `<main>'
/Users/myuser/.rvm/gems/ruby-2.1.3/bin/ruby_executable_hooks:15:in `eval'
/Users/myuser/.rvm/gems/ruby-2.1.3/bin/ruby_executable_hooks:15:in `<main>'
@jipiboily
Copy link
Contributor

Are you getting this when trying to develop something for queue_classic_admin or when using it in your project? Just to be sure.

If this is in one of your app, which is what I assume, how do you proceed to get it installed?

@abevoelker
Copy link
Contributor

I also got this same weird error in a Rails 4.2 app in my development environment. I was able to get the migrations to run on my test environment by recreating the test database with RAILS_ENV=test rake db:drop db:create db:migrate. Then to get past it for development, I just deleted the migrations because I don't use queue_classic-later.

@jipiboily
Copy link
Contributor

Interesting. If you could give some repro steps or app, it would be great.

@abevoelker
Copy link
Contributor

Sure, the main thing is you need to have some migrations that already exist in the database. Starting from a fresh database doesn't seem to trigger it. Here's some exact repro steps:

git clone https://github.com/abevoelker/queue_classic_admin-bugrepro.git
cd queue_classic_admin-bugrepro
bundle
rake db:create db:migrate
rake queue_classic_admin:install:migrations
rake db:migrate

@abevoelker
Copy link
Contributor

I don't know if it would fix it or not, but if it's the ActiveRecord::Base.connection.table_exists? that is causing the problem, you could do a raw SQL migration with execute and check for existence of the table in the actual SQL. If you're relying on a Postgres version >= 9.2 (which I think you are, due to the json data type), then the ALTER TABLE IF EXISTS syntax that was introduced in 9.2 may be useful.

@jacobmendoza
Copy link

Hey,

I don't have too much experience with Queue Classic. Hope not to be misleading. The error doesn't seem to be related to SQL and just to the mere fact that the migration is duplicated. The rake task copies the files to the rails application migration folder. Also, exists an initializer in /lib/queue_classic_admin/engine.rb that adds the migrations of this folder to the app folder.

Aren't this two steps somehow incompatible?. When applying the migrations, rails will look in this two places, the rails application migrations folder and also the gem migrations folder, throwing the error. Pretty sure that I'm missing something, but I'd be very grateful if somebody can help me to understand better.

Thanks to @abevoelker for the repro steps.

@johnkolen
Copy link

I ran into the same issue with Rails 7. What's interesting is that once the queue_classic_admin gem is installed, rake db:migrate fails. That is without calling the rake task. I'm guessing that the duplication is self inflicted. The install rake task copies the internal AddIdToLater migration to the local migration directory. For some reason the source directory is also in the path for possible migration files.

bundle install # remove queue_classic_admin gem
db:migrate # works
bundle install # add queue_classic_admin gem
db:migrate # fails
rake aborted!
StandardError: Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Active Record release the migration was written for:

  class AddIdToLater < ActiveRecord::Migration[7.0]
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:561:in `inherited'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/queue_classic_admin-0.0.13/db/migrate/20130626182618_add_id_to_later.rb:1:in `<main>'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1056:in `load'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1056:in `load_migration'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1050:in `migration'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1046:in `disable_ddl_transaction'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1418:in `use_transaction?'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1365:in `rescue in execute_migration_in_transaction'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1353:in `execute_migration_in_transaction'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1333:in `each'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1333:in `migrate_without_lock'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1282:in `block in migrate'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1432:in `block in with_advisory_lock'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:215:in `with_connection'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1447:in `with_advisory_lock_connection'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1428:in `with_advisory_lock'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1282:in `migrate'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1117:in `up'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1092:in `migrate'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/tasks/database_tasks.rb:262:in `migrate'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/railties/databases.rake:92:in `block (2 levels) in <main>'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'

Caused by:
StandardError: Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Active Record release the migration was written for:

  class AddIdToLater < ActiveRecord::Migration[7.0]
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:561:in `inherited'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/queue_classic_admin-0.0.13/db/migrate/20130626182618_add_id_to_later.rb:1:in `<main>'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1056:in `load'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1056:in `load_migration'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1050:in `migration'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1046:in `disable_ddl_transaction'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1418:in `use_transaction?'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1410:in `ddl_transaction'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1359:in `execute_migration_in_transaction'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1333:in `each'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1333:in `migrate_without_lock'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1282:in `block in migrate'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1432:in `block in with_advisory_lock'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:215:in `with_connection'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1447:in `with_advisory_lock_connection'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1428:in `with_advisory_lock'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1282:in `migrate'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1117:in `up'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/migration.rb:1092:in `migrate'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/tasks/database_tasks.rb:262:in `migrate'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/activerecord-7.0.3.1/lib/active_record/railties/databases.rake:92:in `block (2 levels) in <main>'
/Users/johnkolen/.rvm/gems/ruby-3.0.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
Tasks: TOP => db:migrate

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants