mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #32271 from eileencodes/fix-three-tier-default-connection
Fix default connection handling with three-tier config
This commit is contained in:
commit
9700dacffe
4 changed files with 53 additions and 2 deletions
|
@ -156,7 +156,6 @@ module ActiveRecord
|
||||||
env_config = config[env] if config[env].is_a?(Hash) && !(config[env].key?("adapter") || config[env].key?("url"))
|
env_config = config[env] if config[env].is_a?(Hash) && !(config[env].key?("adapter") || config[env].key?("url"))
|
||||||
end
|
end
|
||||||
|
|
||||||
config.reject! { |k, v| v.is_a?(Hash) && !(v.key?("adapter") || v.key?("url")) }
|
|
||||||
config.merge! env_config if env_config
|
config.merge! env_config if env_config
|
||||||
|
|
||||||
config.each do |key, value|
|
config.each do |key, value|
|
||||||
|
|
|
@ -57,6 +57,10 @@ module ActiveRecord
|
||||||
spec = resolver.resolve(config).symbolize_keys
|
spec = resolver.resolve(config).symbolize_keys
|
||||||
spec[:name] = spec_name
|
spec[:name] = spec_name
|
||||||
|
|
||||||
|
# use the primary config if a config is not passed in and
|
||||||
|
# it's a three tier config
|
||||||
|
spec = spec[spec_name.to_sym] if spec[spec_name.to_sym]
|
||||||
|
|
||||||
connection_handler.establish_connection(spec)
|
connection_handler.establish_connection(spec)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,54 @@ module ActiveRecord
|
||||||
ENV["RAILS_ENV"] = previous_env
|
ENV["RAILS_ENV"] = previous_env
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unless in_memory_db?
|
||||||
|
def test_establish_connection_using_3_level_config_defaults_to_default_env_primary_db
|
||||||
|
previous_env, ENV["RAILS_ENV"] = ENV["RAILS_ENV"], "default_env"
|
||||||
|
|
||||||
|
config = {
|
||||||
|
"default_env" => {
|
||||||
|
"primary" => { "adapter" => "sqlite3", "database" => "db/primary.sqlite3" },
|
||||||
|
"readonly" => { "adapter" => "sqlite3", "database" => "db/readonly.sqlite3" }
|
||||||
|
},
|
||||||
|
"another_env" => {
|
||||||
|
"primary" => { "adapter" => "sqlite3", "database" => "db/another-primary.sqlite3" },
|
||||||
|
"readonly" => { "adapter" => "sqlite3", "database" => "db/another-readonly.sqlite3" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@prev_configs, ActiveRecord::Base.configurations = ActiveRecord::Base.configurations, config
|
||||||
|
|
||||||
|
ActiveRecord::Base.establish_connection
|
||||||
|
|
||||||
|
assert_equal "db/primary.sqlite3", ActiveRecord::Base.connection.pool.spec.config[:database]
|
||||||
|
ensure
|
||||||
|
ActiveRecord::Base.configurations = @prev_configs
|
||||||
|
ENV["RAILS_ENV"] = previous_env
|
||||||
|
ActiveRecord::Base.establish_connection(:arunit)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_establish_connection_using_2_level_config_defaults_to_default_env_primary_db
|
||||||
|
previous_env, ENV["RAILS_ENV"] = ENV["RAILS_ENV"], "default_env"
|
||||||
|
|
||||||
|
config = {
|
||||||
|
"default_env" => {
|
||||||
|
"adapter" => "sqlite3", "database" => "db/primary.sqlite3"
|
||||||
|
},
|
||||||
|
"another_env" => {
|
||||||
|
"adapter" => "sqlite3", "database" => "db/bad-primary.sqlite3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@prev_configs, ActiveRecord::Base.configurations = ActiveRecord::Base.configurations, config
|
||||||
|
|
||||||
|
ActiveRecord::Base.establish_connection
|
||||||
|
|
||||||
|
assert_equal "db/primary.sqlite3", ActiveRecord::Base.connection.pool.spec.config[:database]
|
||||||
|
ensure
|
||||||
|
ActiveRecord::Base.configurations = @prev_configs
|
||||||
|
ENV["RAILS_ENV"] = previous_env
|
||||||
|
ActiveRecord::Base.establish_connection(:arunit)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_establish_connection_using_two_level_configurations
|
def test_establish_connection_using_two_level_configurations
|
||||||
config = { "development" => { "adapter" => "sqlite3", "database" => "db/primary.sqlite3" } }
|
config = { "development" => { "adapter" => "sqlite3", "database" => "db/primary.sqlite3" } }
|
||||||
@prev_configs, ActiveRecord::Base.configurations = ActiveRecord::Base.configurations, config
|
@prev_configs, ActiveRecord::Base.configurations = ActiveRecord::Base.configurations, config
|
||||||
|
|
|
@ -97,7 +97,7 @@ module Rails
|
||||||
elsif configurations[environment].blank? && configurations[connection].blank?
|
elsif configurations[environment].blank? && configurations[connection].blank?
|
||||||
raise ActiveRecord::AdapterNotSpecified, "'#{environment}' database is not configured. Available configuration: #{configurations.inspect}"
|
raise ActiveRecord::AdapterNotSpecified, "'#{environment}' database is not configured. Available configuration: #{configurations.inspect}"
|
||||||
else
|
else
|
||||||
configurations[environment].presence || configurations[connection]
|
configurations[connection] || configurations[environment].presence
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue