aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
authorPier-Olivier Thibault <pothibo@gmail.com>2014-05-07 16:03:23 -0400
committerPier-Olivier Thibault <pothibo@gmail.com>2014-05-07 18:18:00 -0400
commitd14fab04ff4c32c283c7bc86c8b53b872e0fb51c (patch)
tree1e903cdfa04f8750e61db2b0a701abb78353acbc /railties
parent37c1e47da09fba4ee76143da05bbd4faabbaa53e (diff)
downloadrails-d14fab04ff4c32c283c7bc86c8b53b872e0fb51c.tar.gz
rails-d14fab04ff4c32c283c7bc86c8b53b872e0fb51c.tar.bz2
rails-d14fab04ff4c32c283c7bc86c8b53b872e0fb51c.zip
Use Rails::Paths::Path#existent in database_configuration
Database configuration was trying to load the first path that config.paths['config/database'] was returning even if the path didn't exist in the filesystem. Because Rails::Paths::Path has the possibility to return more than 1 path (as an array), database_configuration should filter down the paths to the existing one and then load the first one. This would make it possible to move the database.yml file and add the new path to paths['config/database'] and still load the configurations.
Diffstat (limited to 'railties')
-rw-r--r--railties/CHANGELOG.md5
-rw-r--r--railties/lib/rails/application/configuration.rb2
-rw-r--r--railties/test/application/configuration_test.rb16
3 files changed, 22 insertions, 1 deletions
diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md
index 480ec32443..577bc86fa9 100644
--- a/railties/CHANGELOG.md
+++ b/railties/CHANGELOG.md
@@ -1,3 +1,8 @@
+* Load database configuration from the first
+ database.yml available in paths.
+
+ *Pier-Olivier Thibault*
+
* Reading name and email from git for plugin gemspec.
Fixes #9589.
diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb
index 4c449d2c57..5e8f4de847 100644
--- a/railties/lib/rails/application/configuration.rb
+++ b/railties/lib/rails/application/configuration.rb
@@ -92,7 +92,7 @@ module Rails
# Loads and returns the entire raw configuration of database from
# values stored in `config/database.yml`.
def database_configuration
- yaml = Pathname.new(paths["config/database"].first || "")
+ yaml = Pathname.new(paths["config/database"].existent.first || "")
config = if yaml.exist?
require "yaml"
diff --git a/railties/test/application/configuration_test.rb b/railties/test/application/configuration_test.rb
index 09aba1c2e9..19912805a8 100644
--- a/railties/test/application/configuration_test.rb
+++ b/railties/test/application/configuration_test.rb
@@ -879,5 +879,21 @@ module ApplicationTests
Rails.application.load_runner
assert $ran_block
end
+
+ test "loading the first existing database configuration available" do
+ app_file 'config/environments/development.rb', <<-RUBY
+
+ Rails.application.configure do
+ config.paths.add 'config/database', with: 'config/nonexistant.yml'
+ config.paths['config/database'] << 'config/database.yml'
+ end
+ RUBY
+
+ require "#{app_path}/config/environment"
+
+ db_config = Rails.application.config.database_configuration
+
+ assert db_config.is_a?(Hash)
+ end
end
end