Comments (2)
I reproduced the problem.
$ bin/rails db:schema:load:one --trace
** Invoke db:schema:load:one (first_time)
** Invoke db:test:purge:one (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Invoke db:check_protected_environments (first_time)
** Invoke db:load_config
** Execute db:check_protected_environments
** Execute db:test:purge:one
bin/rails aborted!
TypeError: Invalid type for configuration. Expected Symbol, String, or Hash. Got nil (TypeError)
raise TypeError, "Invalid type for configuration. Expected Symbol, String, or Hash. Got #{config.inspect}"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/activerecord-7.1.2/lib/active_record/database_configurations.rb:183:in `resolve'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/activerecord-7.1.2/lib/active_record/connection_adapters/abstract/connection_handler.rb:324:in `resolve_pool_config'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/activerecord-7.1.2/lib/active_record/connection_adapters/abstract/connection_handler.rb:134:in `establish_connection'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/activerecord-7.1.2/lib/active_record/tasks/database_tasks.rb:516:in `with_temporary_pool'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/activerecord-7.1.2/lib/active_record/tasks/database_tasks.rb:500:in `with_temporary_connection'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/activerecord-7.1.2/lib/active_record/tasks/database_tasks.rb:491:in `with_temporary_connection_for_each'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/activerecord-7.1.2/lib/active_record/railties/databases.rake:588:in `block (5 levels) in <main>'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:281:in `block in execute'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:281:in `each'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:281:in `execute'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:199:in `synchronize'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:199:in `invoke_with_call_chain'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:243:in `block in invoke_prerequisites'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:241:in `each'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:241:in `invoke_prerequisites'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:218:in `block in invoke_with_call_chain'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:199:in `synchronize'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:199:in `invoke_with_call_chain'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/task.rb:188:in `invoke'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/application.rb:182:in `invoke_task'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/application.rb:138:in `block (2 levels) in top_level'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/application.rb:138:in `each'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/application.rb:138:in `block in top_level'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/application.rb:147:in `run_with_threads'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/application.rb:132:in `top_level'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/railties-7.1.2/lib/rails/commands/rake/rake_command.rb:27:in `block (2 levels) in perform'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/application.rb:208:in `standard_exception_handling'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/railties-7.1.2/lib/rails/commands/rake/rake_command.rb:27:in `block in perform'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/railties-7.1.2/lib/rails/commands/rake/rake_command.rb:44:in `block in with_rake'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/rake-13.1.0/lib/rake/rake_module.rb:59:in `with_application'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/railties-7.1.2/lib/rails/commands/rake/rake_command.rb:41:in `with_rake'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/railties-7.1.2/lib/rails/commands/rake/rake_command.rb:20:in `perform'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/railties-7.1.2/lib/rails/command.rb:156:in `invoke_rake'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/railties-7.1.2/lib/rails/command.rb:73:in `block in invoke'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/railties-7.1.2/lib/rails/command.rb:149:in `with_argv'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/railties-7.1.2/lib/rails/command.rb:69:in `invoke'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/railties-7.1.2/lib/rails/commands.rb:18:in `<main>'
<internal:/Users/bparanj/.rvm/rubies/ruby-3.2.2/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
<internal:/Users/bparanj/.rvm/rubies/ruby-3.2.2/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
/Users/bparanj/.rvm/gems/ruby-3.2.2@50672/gems/bootsnap-1.17.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:schema:load:one => db:test:purge:one
from rails.
I've been digging into and it seems db:test:purge:#{name}
expects a config entry for test databases otherwise it will fail. The task db:schema:load:#{name}
depends on it and will fail too if that config is missing.
I kind of understand the dependency between db:schema:load:#{name}
and db:test:purge:#{name}
tasks, but it seems thatdb:schema:load
should be updated to depend on db:test:purge
too, so everything stays consistent.
I prepared this patch that should fix the issue but I'm not so sure if it's a definitive solution. I'm happy to open a PR if this is ok.
diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake
index 08c45c8fba..1a5a1a1694 100644
--- a/activerecord/lib/active_record/railties/databases.rake
+++ b/activerecord/lib/active_record/railties/databases.rake
@@ -472,7 +472,7 @@ db_namespace = namespace :db do
end
desc "Load a database schema file (either db/schema.rb or db/structure.sql, depending on `ENV['SCHEMA_FORMAT']` or `config.active_record.schema_format`) into the database"
- task load: [:load_config, :check_protected_environments] do
+ task load: ["db:test:purge"] do
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(ActiveRecord.schema_format, ENV["SCHEMA"])
end
@@ -587,7 +587,7 @@ db_namespace = namespace :db do
task name => %w(load_config check_protected_environments) do
ActiveRecord::Tasks::DatabaseTasks.with_temporary_connection_for_each(env: "test", name: name) do |conn|
db_config = conn.pool.db_config
- ActiveRecord::Tasks::DatabaseTasks.purge(db_config)
+ ActiveRecord::Tasks::DatabaseTasks.purge(db_config) if db_config
end
end
end
diff --git a/activerecord/lib/active_record/tasks/database_tasks.rb b/activerecord/lib/active_record/tasks/database_tasks.rb
index 0683e5862f..b72da4d401 100644
--- a/activerecord/lib/active_record/tasks/database_tasks.rb
+++ b/activerecord/lib/active_record/tasks/database_tasks.rb
@@ -488,6 +488,7 @@ def clear_schema_cache(filename)
def with_temporary_connection_for_each(env: ActiveRecord::Tasks::DatabaseTasks.env, name: nil, clobber: false, &block) # :nodoc:
if name
db_config = ActiveRecord::Base.configurations.configs_for(env_name: env, name: name)
+ return unless db_config
with_temporary_connection(db_config, clobber: clobber, &block)
else
ActiveRecord::Base.configurations.configs_for(env_name: env, name: name).each do |db_config|
After this change the sequence of tasks for both cases is the following:
$ bin/rails db:schema:load --trace
** Invoke db:schema:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Invoke db:check_protected_environments (first_time)
** Invoke db:load_config
** Execute db:check_protected_environments
** Execute db:test:purge
** Execute db:schema:load
$ bin/rails db:schema:load:one --trace
** Invoke db:schema:load:one (first_time)
** Invoke db:test:purge:one (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Invoke db:check_protected_environments (first_time)
** Invoke db:load_config
** Execute db:check_protected_environments
** Execute db:test:purge:one
** Execute db:schema:load:one
from rails.
Related Issues (20)
- Rails Guides redesign overlapping on wide display.
- reject_if callback evaluation point changed in rails 7.2 HOT 2
- Calling connection.active? after establish_connection returns false since AR 7.2.0 HOT 5
- `destroyed_by_association` is not being set on belongs_to association HOT 2
- [Bug] [ActiveSupport] "rails destroy model Adress" [sic] does not check first if the model exists
- TRUSTED_PROXIES behavior inconsistency due to IPv4-mapped address handling change in Ruby 3.1+ HOT 2
- [ActiveRecord::Encryption] Allow deterministic encryption keys to be rotated HOT 1
- [ActiveRecord::Encryption] Is it possible to store the data in a JSONB column? HOT 2
- ActiveJob run multiple jobs per single enqueue in Rails 7.1 HOT 2
- Cannot run `bin/rubocop --auto-gen-config` with default binstub HOT 3
- `ActionController::RoutingError` raised when using middleware with `recognize_path` HOT 2
- Bug with pluck method when used "where" condition with raw SQL HOT 3
- Can't rollback if migration contains `add_reference` when foreign_key.to_table uses schema path HOT 2
- Syntax error in user.rb when using lambdas
- CI fails with the code generated by Rails version >= 7.2.0 HOT 1
- Changed behaviour if CurrentAttributes caused by new default functionality HOT 3
- Support the Prism parser with ErrorHighlight HOT 1
- `ActionController::Live` and `ActiveRecord::Base.connected_to` stale db state HOT 1
- ActiveRecord::NotNullViolation: PG::NotNullViolation error when trying to generate a preview file with mismatching primary key types HOT 1
- Eject most Active Job adapters into separate gems HOT 11
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rails.