Fix database configuration when adding another config level

This is kind of hard to explain but if you have a database config with
another level like this:

```
development:
  primary:
    database: "my db"
    variables:
      statement_timeout: 1000
```

the database configurations code would chooke on the `variables` level
because it didn't know what to do with it.

We'd see the following error:

```
lib/active_record/database_configurations.rb:72:in
`block in find_db_config': undefined method `env_name' for [nil]:Array
(NoMethodError)
```

The problem here is that Rails does correctly identify this as not a
real configuration but returns `[nil]` along with the others. We need to
make sure to flatten the array and remove all the `nil`'s before
returning the `configurations` objects.

Fixes #35646
This commit is contained in:
eileencodes 2019-03-18 16:23:00 -04:00
parent 98d0f93506
commit 8f3066fccc
2 changed files with 3 additions and 1 deletions

@ -106,7 +106,7 @@ def build_configs(configs)
build_db_config = configs.each_pair.flat_map do |env_name, config|
walk_configs(env_name.to_s, "primary", config)
end.compact
end.flatten.compact
if url = ENV["DATABASE_URL"]
build_url_config(url, build_db_config)

@ -123,6 +123,8 @@ def build_app(options = {})
adapter: sqlite3
pool: 5
timeout: 5000
variables:
statement_timeout: 1000
development:
primary:
<<: *default