DMPRoadmap / roadmap

DCC/UC3 collaboration for a data management planning tool
MIT License
102 stars 109 forks source link

bin/rails db:schema:load issue #3216

Closed StCyr closed 1 year ago

StCyr commented 1 year ago

Please complete the following fields as applicable:

What version of the DMPRoadmap code are you running? (e.g. v2.2.0) master branch

Expected behaviour: bin/rails db:schema:load should just work

Actual behaviour:

root@dmponline-rails-uk:/home/roadmap# bin/rails db:create
Created database 'roadmap_development'
Database 'roadmap_development' already exists
root@dmponline-rails-uk:/home/roadmap# bin/rails db:schema:load
-- create_table("annotations", {:id=>:integer, :force=>:cascade})
   -> 0.0332s
-- create_table("answers", {:id=>:integer, :force=>:cascade})
   -> 0.0388s
-- create_table("answers_question_options", {:id=>false, :force=>:cascade})
   -> 0.0237s
-- create_table("api_clients", {:id=>:integer, :force=>:cascade})
   -> 0.0256s
-- create_table("conditions", {:id=>:integer, :force=>:cascade})
   -> 0.0228s
-- create_table("contributors", {:id=>:integer, :force=>:cascade})
   -> 0.0344s
-- create_table("departments", {:id=>:integer, :force=>:cascade})
   -> 0.0228s
-- create_table("exported_plans", {:id=>:integer, :force=>:cascade})
   -> 0.0163s
-- create_table("external_api_access_tokens", {:force=>:cascade})
   -> 0.0393s
-- create_table("guidance_groups", {:id=>:integer, :force=>:cascade})
   -> 0.0377s
-- create_table("guidances", {:id=>:integer, :force=>:cascade})
   -> 0.0364s
-- create_table("identifier_schemes", {:id=>:integer, :force=>:cascade})
   -> 0.0317s
-- create_table("identifiers", {:id=>:integer, :force=>:cascade})
   -> 0.0566s
-- create_table("languages", {:id=>:integer, :force=>:cascade})
   -> 0.0297s
-- create_table("licenses", {:force=>:cascade})
   -> 0.0501s
-- create_table("metadata_standards", {:force=>:cascade})
   -> 0.0296s
-- create_table("metadata_standards_research_outputs", {:force=>:cascade})
   -> 0.0478s
-- create_table("notes", {:id=>:integer, :force=>:cascade})
   -> 0.0551s
-- create_table("notification_acknowledgements", {:id=>:integer, :force=>:cascade})
   -> 0.0479s
-- create_table("notifications", {:id=>:integer, :force=>:cascade})
   -> 0.0322s
-- create_table("org_token_permissions", {:id=>:integer, :force=>:cascade})
   -> 0.0426s
-- create_table("orgs", {:id=>:integer, :force=>:cascade})
   -> 0.0584s
-- create_table("perms", {:id=>:integer, :force=>:cascade})
   -> 0.0371s
-- create_table("phases", {:id=>:integer, :force=>:cascade})
   -> 0.0556s
-- create_table("plans", {:id=>:integer, :force=>:cascade})
   -> 0.0708s
-- create_table("plans_guidance_groups", {:id=>:integer, :force=>:cascade})
   -> 0.0392s
-- create_table("prefs", {:id=>:integer, :force=>:cascade})
   -> 0.0258s
-- create_table("question_format_labels", {:id=>false, :force=>:cascade})
   -> 0.0255s
-- create_table("question_formats", {:id=>:integer, :force=>:cascade})
   -> 0.0258s
-- create_table("question_options", {:id=>:integer, :force=>:cascade})
   -> 0.0395s
-- create_table("questions", {:id=>:integer, :force=>:cascade})
   -> 0.0432s
-- create_table("questions_themes", {:id=>false, :force=>:cascade})
   -> 0.0307s
-- create_table("regions", {:id=>:integer, :force=>:cascade})
   -> 0.0387s
-- create_table("related_identifiers", {:force=>:cascade})
   -> 0.0672s
-- create_table("repositories", {:force=>:cascade})
   -> 0.0621s
-- create_table("repositories_research_outputs", {:force=>:cascade})
   -> 0.0620s
-- create_table("research_domains", {:force=>:cascade})
   -> 0.0495s
-- create_table("research_outputs", {:force=>:cascade})
   -> 0.0613s
-- create_table("roles", {:id=>:integer, :force=>:cascade})
   -> 0.0603s
-- create_table("sections", {:id=>:integer, :force=>:cascade})
   -> 0.0522s
-- create_table("sessions", {:id=>:integer, :force=>:cascade})
   -> 0.0514s
-- create_table("settings", {:id=>:integer, :force=>:cascade})
   -> 0.0368s
-- create_table("stats", {:id=>:integer, :force=>:cascade})
   -> 0.0333s
-- create_table("subscriptions", {:force=>:cascade})
   -> 0.0412s
-- create_table("templates", {:id=>:integer, :force=>:cascade})
   -> 0.0616s
-- create_table("themes", {:id=>:integer, :force=>:cascade})
   -> 0.0420s
-- create_table("themes_in_guidance", {:id=>false, :force=>:cascade})
   -> 0.0501s
-- create_table("token_permission_types", {:id=>:integer, :force=>:cascade})
   -> 0.0360s
-- create_table("trackers", {:id=>:integer, :force=>:cascade})
   -> 0.0419s
-- create_table("users", {:id=>:integer, :force=>:cascade})
   -> 0.0535s
-- create_table("users_perms", {:id=>false, :force=>:cascade})
   -> 0.0285s
-- add_foreign_key("annotations", "orgs")
   -> 0.0905s
-- add_foreign_key("annotations", "questions")
   -> 0.0910s
-- add_foreign_key("answers", "plans")
   -> 0.1010s
-- add_foreign_key("answers", "questions")
   -> 0.0862s
-- add_foreign_key("answers", "users")
   -> 0.0917s
-- add_foreign_key("conditions", "questions")
   -> 0.0662s
-- add_foreign_key("guidance_groups", "orgs")
   -> 0.0670s
-- add_foreign_key("guidances", "guidance_groups")
   -> 0.0847s
-- add_foreign_key("notes", "answers")
   -> 0.1035s
-- add_foreign_key("notes", "users")
   -> 0.0749s
-- add_foreign_key("notification_acknowledgements", "notifications")
   -> 0.0720s
-- add_foreign_key("notification_acknowledgements", "users")
   -> 0.0765s
-- add_foreign_key("org_token_permissions", "orgs")
   -> 0.0826s
-- add_foreign_key("org_token_permissions", "token_permission_types")
   -> 0.0916s
-- add_foreign_key("orgs", "languages")
   -> 0.0798s
-- add_foreign_key("orgs", "regions")
   -> 0.0838s
-- add_foreign_key("phases", "templates")
   -> 0.0656s
-- add_foreign_key("plans", "orgs")
   -> 0.1070s
-- add_foreign_key("plans", "templates")
   -> 0.0655s
-- add_foreign_key("plans_guidance_groups", "guidance_groups")
   -> 0.0535s
-- add_foreign_key("plans_guidance_groups", "plans")
   -> 0.0669s
-- add_foreign_key("question_options", "questions")
   -> 0.0931s
-- add_foreign_key("questions", "question_formats")
   -> 0.0786s
-- add_foreign_key("questions", "sections")
   -> 0.1011s
-- add_foreign_key("research_domains", "research_domains", {:column=>"parent_id"})
   -> 0.0445s
-- add_foreign_key("research_outputs", "licenses")
   -> 0.0602s
-- add_foreign_key("roles", "plans")
   -> 0.0618s
-- add_foreign_key("roles", "users")
   -> 0.0831s
-- add_foreign_key("sections", "phases")
   -> 0.0936s
-- add_foreign_key("templates", "orgs")
   -> 0.1089s
-- add_foreign_key("themes_in_guidance", "guidances")
   -> 0.0780s
-- add_foreign_key("themes_in_guidance", "themes")
   -> 0.0944s
-- add_foreign_key("trackers", "orgs")
   -> 0.0618s
-- add_foreign_key("users", "departments")
   -> 0.1163s
-- add_foreign_key("users", "languages")
   -> 0.0635s
-- add_foreign_key("users", "orgs")
   -> 0.1066s
-- create_table("annotations", {:id=>:integer, :force=>:cascade})
   -> 0.0749s
-- create_table("answers", {:id=>:integer, :force=>:cascade})
rails aborted!
ActiveRecord::StatementInvalid: Mysql2::Error: Cannot drop table 'answers' referenced by a foreign key constraint 'fk_rails_907f8d48bf' on table 'notes'.: DROP TABLE IF EXISTS `answers` CASCADE
/usr/local/bundle/gems/mysql2-0.5.4/lib/mysql2/client.rb:148:in `_query'
/usr/local/bundle/gems/mysql2-0.5.4/lib/mysql2/client.rb:148:in `block in query'
/usr/local/bundle/gems/mysql2-0.5.4/lib/mysql2/client.rb:147:in `handle_interrupt'
/usr/local/bundle/gems/mysql2-0.5.4/lib/mysql2/client.rb:147:in `query'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:187:in `block (2 levels) in execute'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:186:in `block in execute'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_adapter.rb:581:in `block (2 levels) in log'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_adapter.rb:580:in `block in log'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_adapter.rb:571:in `log'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:185:in `execute'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/mysql/database_statements.rb:28:in `execute'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:340:in `drop_table'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract/schema_statements.rb:308:in `create_table'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/migration.rb:871:in `block in method_missing'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/migration.rb:840:in `block in say_with_time'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/migration.rb:840:in `say_with_time'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/migration.rb:860:in `method_missing'
/home/roadmap/db/schema.rb:28:in `block in <main>'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/schema.rb:50:in `instance_eval'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/schema.rb:50:in `define'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/schema.rb:46:in `define'
/home/roadmap/db/schema.rb:13:in `<main>'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/dependencies.rb:285:in `load'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/dependencies.rb:285:in `block in load'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/dependencies.rb:257:in `load_dependency'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/dependencies.rb:285:in `load'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/tasks/database_tasks.rb:245:in `load_schema'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/tasks/database_tasks.rb:266:in `block in load_schema_current'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/tasks/database_tasks.rb:316:in `block in each_current_configuration'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/tasks/database_tasks.rb:313:in `each'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/tasks/database_tasks.rb:313:in `each_current_configuration'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/tasks/database_tasks.rb:265:in `load_schema_current'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/railties/databases.rake:258:in `block (3 levels) in <main>'
/usr/local/bundle/gems/railties-5.2.8.1/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
/usr/local/bundle/gems/railties-5.2.8.1/lib/rails/commands/rake/rake_command.rb:20:in `perform'
/usr/local/bundle/gems/railties-5.2.8.1/lib/rails/command.rb:48:in `invoke'
/usr/local/bundle/gems/railties-5.2.8.1/lib/rails/commands.rb:18:in `<main>'
/usr/local/bundle/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/usr/local/bundle/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:4:in `<main>'

Caused by:
Mysql2::Error: Cannot drop table 'answers' referenced by a foreign key constraint 'fk_rails_907f8d48bf' on table 'notes'.
/usr/local/bundle/gems/mysql2-0.5.4/lib/mysql2/client.rb:148:in `_query'
/usr/local/bundle/gems/mysql2-0.5.4/lib/mysql2/client.rb:148:in `block in query'
/usr/local/bundle/gems/mysql2-0.5.4/lib/mysql2/client.rb:147:in `handle_interrupt'
/usr/local/bundle/gems/mysql2-0.5.4/lib/mysql2/client.rb:147:in `query'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:187:in `block (2 levels) in execute'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:186:in `block in execute'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_adapter.rb:581:in `block (2 levels) in log'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_adapter.rb:580:in `block in log'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_adapter.rb:571:in `log'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:185:in `execute'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/mysql/database_statements.rb:28:in `execute'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:340:in `drop_table'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/connection_adapters/abstract/schema_statements.rb:308:in `create_table'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/migration.rb:871:in `block in method_missing'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/migration.rb:840:in `block in say_with_time'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/migration.rb:840:in `say_with_time'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/migration.rb:860:in `method_missing'
/home/roadmap/db/schema.rb:28:in `block in <main>'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/schema.rb:50:in `instance_eval'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/schema.rb:50:in `define'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/schema.rb:46:in `define'
/home/roadmap/db/schema.rb:13:in `<main>'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/dependencies.rb:285:in `load'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/dependencies.rb:285:in `block in load'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/dependencies.rb:257:in `load_dependency'
/usr/local/bundle/gems/activesupport-5.2.8.1/lib/active_support/dependencies.rb:285:in `load'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/tasks/database_tasks.rb:245:in `load_schema'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/tasks/database_tasks.rb:266:in `block in load_schema_current'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/tasks/database_tasks.rb:316:in `block in each_current_configuration'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/tasks/database_tasks.rb:313:in `each'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/tasks/database_tasks.rb:313:in `each_current_configuration'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/tasks/database_tasks.rb:265:in `load_schema_current'
/usr/local/bundle/gems/activerecord-5.2.8.1/lib/active_record/railties/databases.rake:258:in `block (3 levels) in <main>'
/usr/local/bundle/gems/railties-5.2.8.1/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
/usr/local/bundle/gems/railties-5.2.8.1/lib/rails/commands/rake/rake_command.rb:20:in `perform'
/usr/local/bundle/gems/railties-5.2.8.1/lib/rails/command.rb:48:in `invoke'
/usr/local/bundle/gems/railties-5.2.8.1/lib/rails/commands.rb:18:in `<main>'
/usr/local/bundle/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/usr/local/bundle/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:schema:load
(See full trace by running task with --trace)
root@dmponline-rails-uk:/home/roadmap# 

Steps to reproduce: I've created a docker environment as follow:

docker network create --driver=bridge dmponline
docker run --name dmponline-db-uk -e MYSQL_ROOT_PASSWORD=root -d --network dmponline mysql
docker run -i -t --name dmponline-rails-uk --hostname dmponline-rails-uk --network dmponline -w /home ruby:2.7 git clone https://github.com/DMPRoadmap/roadmap (This command is not correct. I should update my installation notes)
docker start dmponline-rails
docker exec -w /home/roadmap dmponline-rails bundle install
docker start dmponline-rails
docker exec -w /home/roadmap dmponline-rails /bin/bash
cp config/initializers/contact_us.rb.example config/initializers/contact_us.rb
cp config/initializers/wicked_pdf.rb.example config/initializers/wicked_pdf.rb
cp config/database.yml.sample config/database.yml
cat <<EOF > .env
DB_ADAPTER=mysql2
DB_PASSWORD=root
RAILS_ENV=development
EOF
apt update
apt install nodejs vim
EDITOR=vim bin/rails credentials:edit
< usual credentials config here>
Add the following 2 lines to file config/database.yml in the defaults section (after line "username:..." for example):
password: <%= ENV["DB_PASSWORD"] %>
host: dmponline-db
docker exec -w /home/roadmap dmponline-rails bin/rails db:create
docker exec -w /home/roadmap dmponline-rails bin/rails db:schema:load
StCyr commented 1 year ago

Ah it seems its just the task being called twice for some reason

StCyr commented 1 year ago

Ok, if I skip over this error I can get the application to run

briri commented 1 year ago

interesting. Does the db:create command fail? I'm wondering if the dmponline-db container already has a DB.