Actions
Bug #25950
closed[Upgrade] Cannot modify association 'Organization#reports' because the source reflection class 'ConfigReport' is associated to 'Host::Managed' via :has_many.
Description
When upgrading a 1.20.1 to 1.21-RC3, the following error is observed:
# foreman-rake db:seed Seeding /usr/share/foreman/db/seeds.d/020-permissions_list.rb Seeding /usr/share/foreman/db/seeds.d/020-roles_list.rb Seeding /usr/share/foreman/db/seeds.d/030-auth_sources.rb Seeding /usr/share/foreman/db/seeds.d/030-permissions.rb Seeding /usr/share/foreman/db/seeds.d/035-admin.rb Seeding /usr/share/foreman/db/seeds.d/040-roles.rb Seeding /usr/share/foreman/db/seeds.d/050-taxonomies.rb rake aborted! ActiveRecord::HasManyThroughCantAssociateThroughHasOneOrManyReflection: Cannot modify association 'Organization#reports' because the source reflection class 'ConfigReport' is associated to 'Host::Managed' via :has_many. /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/through_association.rb:94:in `ensure_mutable' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/has_many_through_association.rb:58:in `build_through_record' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/has_many_through_association.rb:82:in `save_through_record' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/has_many_through_association.rb:45:in `insert_record' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:438:in `block (2 levels) in concat_records' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:458:in `replace_on_target' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:282:in `add_to_target' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:436:in `block in concat_records' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:434:in `each' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:434:in `concat_records' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/has_many_association.rb:116:in `concat_records' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/has_many_through_association.rb:27:in `concat_records' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:119:in `block in concat' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:134:in `block in transaction' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:252:in `transaction' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/transactions.rb:212:in `transaction' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:133:in `transaction' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:119:in `concat' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/has_many_through_association.rb:21:in `concat' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:414:in `replace_records' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:250:in `block in replace' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:134:in `block in transaction' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:254:in `block in transaction' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/transaction.rb:239:in `block in within_new_transaction' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/transaction.rb:236:in `within_new_transaction' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:254:in `transaction' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/transactions.rb:212:in `transaction' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:133:in `transaction' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:250:in `replace' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/collection_association.rb:41:in `writer' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/associations/builder/association.rb:116:in `reports=' /usr/share/foreman/db/seeds.d/050-taxonomies.rb:17:in `block (4 levels) in <top (required)>' /usr/share/foreman/db/seeds.d/050-taxonomies.rb:16:in `each' /usr/share/foreman/db/seeds.d/050-taxonomies.rb:16:in `block (3 levels) in <top (required)>' /opt/theforeman/tfm/root/usr/share/gems/gems/audited-4.7.1/lib/audited/auditor.rb:336:in `without_auditing' /usr/share/foreman/db/seeds.d/050-taxonomies.rb:8:in `block (2 levels) in <top (required)>' /usr/share/foreman/db/seeds.d/050-taxonomies.rb:7:in `each' /usr/share/foreman/db/seeds.d/050-taxonomies.rb:7:in `block in <top (required)>' /usr/share/foreman/app/models/concerns/foreman/thread_session.rb:100:in `as' /usr/share/foreman/app/models/concerns/foreman/thread_session.rb:106:in `as_anonymous_admin' /usr/share/foreman/db/seeds.d/050-taxonomies.rb:6:in `<top (required)>' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:281:in `load' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:281:in `block in load' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:253:in `load_dependency' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:281:in `load' /usr/share/foreman/db/seeds.rb:36:in `block (2 levels) in <top (required)>' /usr/share/foreman/app/models/concerns/foreman/thread_session.rb:100:in `as' /usr/share/foreman/app/models/concerns/foreman/thread_session.rb:106:in `as_anonymous_admin' /usr/share/foreman/db/seeds.rb:35:in `block in <top (required)>' /usr/share/foreman/db/seeds.rb:29:in `each' /usr/share/foreman/db/seeds.rb:29:in `<top (required)>' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:281:in `load' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:281:in `block in load' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:253:in `load_dependency' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:281:in `load' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/railties-5.2.1/lib/rails/engine.rb:551:in `load_seed' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/tasks/database_tasks.rb:281:in `load_seed' /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/railties/databases.rake:194:in `block (2 levels) in <top (required)>' /opt/rh/rh-ruby25/root/usr/share/gems/gems/rake-12.3.0/exe/rake:27:in `<top (required)>' Tasks: TOP => db:seed (See full trace by running task with --trace)
This can be trivially reproduced by spinning up a centos7-foreman-1.20
box in forklift and upgrading it by following the official documentation.
I guess it's related to the fact that 1.21 has Locations mandatory, but 1.20 was deployed without them.
Actions