Method: Rails::Application::Configuration#database_configuration

Defined in:
railties/lib/rails/application/configuration.rb

#database_configurationObject

Loads and returns the entire raw configuration of database from values stored in config/database.yml.



431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
# File 'railties/lib/rails/application/configuration.rb', line 431

def database_configuration
  path = paths["config/database"].existent.first
  yaml = Pathname.new(path) if path

  config = if yaml&.exist?
    loaded_yaml = ActiveSupport::ConfigurationFile.parse(yaml)
    if (shared = loaded_yaml.delete("shared"))
      loaded_yaml.each do |env, config|
        if config.is_a?(Hash) && config.values.all?(Hash)
          if shared.is_a?(Hash) && shared.values.all?(Hash)
            config.map do |name, sub_config|
              sub_config.reverse_merge!(shared[name])
            end
          else
            config.map do |name, sub_config|
              sub_config.reverse_merge!(shared)
            end
          end
        else
          config.reverse_merge!(shared)
        end
      end
    end
    Hash.new(shared).merge(loaded_yaml)
  elsif ENV["DATABASE_URL"]
    # Value from ENV['DATABASE_URL'] is set to default database connection
    # by Active Record.
    {}
  else
    raise "Could not load database configuration. No such file - #{paths["config/database"].instance_variable_get(:@paths)}"
  end

  config
rescue => e
  raise e, "Cannot load database configuration:\n#{e.message}", e.backtrace
end