I have a rails app that is using the one click DO image.
I can run any of the rake db:*
successfully but when I run rails console
I can't connect to the db.
How can I fix it? The app is working fine. So I think is a rails console
problem.
Console output:
deployer:/home/rails$ RAILS_ENV=production bundle exec rake db:migrate
ActiveRecord::SchemaMigration Load (3.2ms) SELECT "schema_migrations".* FROM "schema_migrations"
deployer:/home/rails$ echo $APP_DATABASE_PASSWORD
[redacted database password]
deployer:/home/rails$ RAILS_ENV=production bundle exec rails console
Running via Spring preloader in process 25038
Loading production environment (Rails 4.2.6)
2.3.0 :001 > User.connection
PG::ConnectionBad: fe_sendauth: no password supplied
database.yml
default: &default
adapter: postgresql
encoding: unicode
pool: 5
host: localhost
username: rails
password: <%= ENV['APP_DATABASE_PASSWORD'] %>
production:
<<: *default
database: production
username: rails
password: <%= ENV['APP_DATABASE_PASSWORD'] %>
EDIT
Looking around I found that ActiveRecord::Base.configurations
has password: nil
. Why then the server process reads the password but console doesn't?
I added ActiveRecord::Base.configurations
to an initializer. At initialization the password is present.
On console ActiveRecord::Base.configurations
returns all the info as expected, except by the password. I even have reload the default vars with . /etc/defaults/unicorn
EDIT 2
ActiveRecord::Base.configurations
on RAILS_ENV=production bundle exec rails console
{"default"=>
{"adapter"=>"postgresql",
"encoding"=>"unicode",
"pool"=>5,
"host"=>"localhost",
"username"=>"rails",
"password"=>nil},
"development"=>
{"adapter"=>"postgresql",
"encoding"=>"unicode",
"pool"=>5,
"host"=>"localhost",
"username"=>"rails",
"password"=>nil,
"database"=>"development"},
"test"=>
{"adapter"=>"postgresql",
"encoding"=>"unicode",
"pool"=>5,
"host"=>"localhost",
"username"=>"rails",
"password"=>nil,
"database"=>"test"},
"production"=>
{"adapter"=>"postgresql",
"encoding"=>"unicode",
"pool"=>5,
"host"=>"localhost",
"username"=>"rails",
"password"=>nil,
"database"=>"production"}}
ActiveRecord::Base.configurations
on APP_DATABASE_PASSWORD=password RAILS_ENV=production bundle exec rails console
{"default"=>
{"adapter"=>"postgresql",
"encoding"=>"unicode",
"pool"=>5,
"host"=>"localhost",
"username"=>"rails",
"password"=>nil},
"development"=>
{"adapter"=>"postgresql",
"encoding"=>"unicode",
"pool"=>5,
"host"=>"localhost",
"username"=>"rails",
"password"=>nil,
"database"=>"development"},
"test"=>
{"adapter"=>"postgresql",
"encoding"=>"unicode",
"pool"=>5,
"host"=>"localhost",
"username"=>"rails",
"password"=>nil,
"database"=>"test"},
"production"=>
{"adapter"=>"postgresql",
"encoding"=>"unicode",
"pool"=>5,
"host"=>"localhost",
"username"=>"rails",
"password"=>nil,
"database"=>"production"}}
ActiveRecord::Base.configurations
on RAILS_ENV=production bundle exec rails server
{"default"=>
{"adapter"=>"postgresql",
"encoding"=>"unicode",
"pool"=>5,
"host"=>"localhost",
"username"=>"rails",
"password"=>[password]},
"development"=>
{"adapter"=>"postgresql",
"encoding"=>"unicode",
"pool"=>5,
"host"=>"localhost",
"username"=>"rails",
"password"=>[password],
"database"=>"development"},
"test"=>
{"adapter"=>"postgresql",
"encoding"=>"unicode",
"pool"=>5,
"host"=>"localhost",
"username"=>"rails",
"password"=>[password],
"database"=>"test"},
"production"=>
{"adapter"=>"postgresql",
"encoding"=>"unicode",
"pool"=>5,
"host"=>"localhost",
"username"=>"rails",
"password"=>[password],
"database"=>"production"}}
It turns out that the important difference is the Spring preloader. It seems that you've started Spring before you've defined the ENV variable.
Try killing Spring and restarting the console.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With