diff options
author | Will Jessop <will@willj.net> | 2019-07-08 05:49:58 +0100 |
---|---|---|
committer | Will Jessop <will@willj.net> | 2019-07-08 06:00:30 +0100 |
commit | ff42b21915c08cf44f2c263dfe13c249dd780528 (patch) | |
tree | 7170c5c0159b5c0c8d0a0202021cd8d16b3700c5 /activerecord | |
parent | 7729dfc6ef0bfddcf55c214b86c7e2530024d58a (diff) | |
download | rails-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.rb | 10 | ||||
-rw-r--r-- | activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb | 19 |
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" |