aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorEileen M. Uchitelle <eileencodes@users.noreply.github.com>2019-07-24 19:49:14 -0400
committerGitHub <noreply@github.com>2019-07-24 19:49:14 -0400
commit49b531ba588eb8da50ee810b377a461dc9aee618 (patch)
tree52830451acc81d8ae2783d29ee4777ab5c066f78 /activerecord/lib
parentb1c27c059c88642aaf4a0c486320c03de4f165f6 (diff)
parent396dba08741b2c1d5a41debbb4bbde799c9f2a31 (diff)
downloadrails-49b531ba588eb8da50ee810b377a461dc9aee618.tar.gz
rails-49b531ba588eb8da50ee810b377a461dc9aee618.tar.bz2
rails-49b531ba588eb8da50ee810b377a461dc9aee618.zip
Merge pull request #36756 from seejohnrun/env-urls-with-multiple-databases
Fix multiple database support for DATABASE_URL env variable
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/database_configurations.rb30
1 files changed, 18 insertions, 12 deletions
diff --git a/activerecord/lib/active_record/database_configurations.rb b/activerecord/lib/active_record/database_configurations.rb
index bf31bb7c22..e122628b05 100644
--- a/activerecord/lib/active_record/database_configurations.rb
+++ b/activerecord/lib/active_record/database_configurations.rb
@@ -104,18 +104,28 @@ module ActiveRecord
return configs.configurations if configs.is_a?(DatabaseConfigurations)
return configs if configs.is_a?(Array)
- build_db_config = configs.each_pair.flat_map do |env_name, config|
- walk_configs(env_name.to_s, "primary", config)
- end.flatten.compact
+ db_configs = configs.flat_map do |env_name, config|
+ if config.is_a?(Hash) && config.all? { |k, v| v.is_a?(Hash) }
+ walk_configs(env_name.to_s, config)
+ else
+ build_db_config_from_raw_config(env_name.to_s, "primary", config)
+ end
+ end.compact
if url = ENV["DATABASE_URL"]
- build_url_config(url, build_db_config)
+ merge_url_with_configs(url, db_configs)
else
- build_db_config
+ db_configs
+ end
+ end
+
+ def walk_configs(env_name, config)
+ config.map do |spec_name, sub_config|
+ build_db_config_from_raw_config(env_name, spec_name.to_s, sub_config)
end
end
- def walk_configs(env_name, spec_name, config)
+ def build_db_config_from_raw_config(env_name, spec_name, config)
case config
when String
build_db_config_from_string(env_name, spec_name, config)
@@ -141,16 +151,12 @@ module ActiveRecord
config_without_url.delete "url"
ActiveRecord::DatabaseConfigurations::UrlConfig.new(env_name, spec_name, url, config_without_url)
- elsif config["database"] || config["adapter"] || ENV["DATABASE_URL"]
- ActiveRecord::DatabaseConfigurations::HashConfig.new(env_name, spec_name, config)
else
- config.each_pair.map do |sub_spec_name, sub_config|
- walk_configs(env_name, sub_spec_name, sub_config)
- end
+ ActiveRecord::DatabaseConfigurations::HashConfig.new(env_name, spec_name, config)
end
end
- def build_url_config(url, configs)
+ def merge_url_with_configs(url, configs)
env = ActiveRecord::ConnectionHandling::DEFAULT_ENV.call.to_s
if configs.find(&:for_current_env?)