aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorWill Jessop <will@willj.net>2019-07-08 05:49:58 +0100
committerWill Jessop <will@willj.net>2019-07-08 06:00:30 +0100
commitff42b21915c08cf44f2c263dfe13c249dd780528 (patch)
tree7170c5c0159b5c0c8d0a0202021cd8d16b3700c5 /activerecord
parent7729dfc6ef0bfddcf55c214b86c7e2530024d58a (diff)
downloadrails-ff42b21915c08cf44f2c263dfe13c249dd780528.tar.gz
rails-ff42b21915c08cf44f2c263dfe13c249dd780528.tar.bz2
rails-ff42b21915c08cf44f2c263dfe13c249dd780528.zip
When DATABASE_URL is specified don't trample envs that use a url: key
fixes #36610
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/database_configurations.rb10
-rw-r--r--activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb19
2 files changed, 24 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/database_configurations.rb b/activerecord/lib/active_record/database_configurations.rb
index b917f4e6b7..bf31bb7c22 100644
--- a/activerecord/lib/active_record/database_configurations.rb
+++ b/activerecord/lib/active_record/database_configurations.rb
@@ -153,11 +153,11 @@ module ActiveRecord
def build_url_config(url, configs)
env = ActiveRecord::ConnectionHandling::DEFAULT_ENV.call.to_s
- if original_config = configs.find(&:for_current_env?)
- if original_config.url_config?
- configs
- else
- configs.map do |config|
+ if configs.find(&:for_current_env?)
+ configs.map do |config|
+ if config.url_config?
+ config
+ else
ActiveRecord::DatabaseConfigurations::UrlConfig.new(config.env_name, config.spec_name, url, config.config)
end
end
diff --git a/activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb b/activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb
index c0a9f8f9ca..6372abbf3f 100644
--- a/activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb
+++ b/activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb
@@ -244,6 +244,25 @@ module ActiveRecord
assert_equal expected, actual
end
+ def test_no_url_sub_key_with_database_url_doesnt_trample_other_envs
+ ENV["DATABASE_URL"] = "postgres://localhost/baz"
+
+ config = { "default_env" => { "database" => "foo" }, "other_env" => { "url" => "postgres://foohost/bardb" } }
+ actual = resolve_config(config)
+ expected = { "default_env" =>
+ { "database" => "baz",
+ "adapter" => "postgresql",
+ "host" => "localhost"
+ },
+ "other_env" =>
+ { "adapter" => "postgresql",
+ "database" => "bardb",
+ "host" => "foohost"
+ }
+ }
+ assert_equal expected, actual
+ end
+
def test_merge_no_conflicts_with_database_url
ENV["DATABASE_URL"] = "postgres://localhost/foo"