Tell the user which file is missing when config/database.yml was not found

Since cc03675d30b58e28f585720dad14e947a57ff5b the error message became like
"Could not load database configuration. No such file -"
which doesn't really tell what's actually missing.
This commit is contained in:
Akira Matsuda 2014-09-10 19:25:01 +09:00
parent 9e1a7398aa
commit ed9d220cd1
2 changed files with 13 additions and 3 deletions

@ -93,9 +93,10 @@ def paths
# 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"].existent.first || "")
path = paths["config/database"].existent.first
yaml = Pathname.new(path) if path
config = if yaml.exist?
config = if yaml && yaml.exist?
require "yaml"
require "erb"
YAML.load(ERB.new(yaml.read).result) || {}
@ -104,7 +105,7 @@ def database_configuration
# by Active Record.
{}
else
raise "Could not load database configuration. No such file - #{yaml}"
raise "Could not load database configuration. No such file - #{paths["config/database"].instance_variable_get(:@paths)}"
end
config

@ -980,6 +980,15 @@ def index
assert_kind_of Hash, Rails.application.config.database_configuration
end
test 'raises with proper error message if no database configuration found' do
FileUtils.rm("#{app_path}/config/database.yml")
require "#{app_path}/config/environment"
err = assert_raises RuntimeError do
Rails.application.config.database_configuration
end
assert_match 'config/database', err.message
end
test 'config.action_mailer.show_previews defaults to true in development' do
Rails.env = "development"
require "#{app_path}/config/environment"