There are a lot of factors that can effect the database configuration values.
- What are the settings in each environment in
config/database.yml
? - Is there any dynamic ERB code in
config/database.yml
? - Is
DATABASE_URL
set in the current environment? - Is any other code overriding these settings?
To check the current configuration hash for the database connection at runtime, we can run the following statement:
> ActiveRecord::Base.connection.pool.db_config.configuration_hash
=>
{:adapter=>"postgresql",
:encoding=>"unicode",
:host=>"::1",
:user=>"postgres",
:password=>"postgres",
:pool=>5,
:database=>"still_development",
:port=>9875}
In this case, I'm running the statement from the Rails console of my app's development environment.
I could even access and print these values as part of debugging in a production environment with a rake task:
# In lib/tasks/debug.rake
namespace :debug do
task :db_config => :environment do
puts "==== Database Configuration Debug ===="
puts "DATABASE_URL: #{ENV['DATABASE_URL']}"
puts "Active Record Config: #{ActiveRecord::Base.connection.pool.db_config.configuration_hash}"
puts "Raw ENV dump:"
ENV.sort.each { |k,v| puts "#{k}: #{v}" if k.include?('DB') || k.include?('DATABASE') }
end
end