我的rails应用程序使用了一键式DO镜像。我可以成功运行任何
控制台输出:
当你在
rake db:*
,但当我运行rails console
时,无法连接到数据库。如何解决?应用程序正常工作,所以我认为是一个rails console
的问题。控制台输出:
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
我发现 ActiveRecord::Base.configurations
中的 password: nil
。那么为什么服务器进程可以读取密码,但控制台却不能?
我将 ActiveRecord::Base.configurations
添加到了初始化器中。在初始化时,密码是存在的。
在控制台中,ActiveRecord::Base.configurations
返回了所有预期的信息,除了密码。我甚至已经用 . /etc/defaults/unicorn
重新加载了默认变量。
EDIT 2
在 RAILS_ENV=production bundle exec rails console
中,ActiveRecord::Base.configurations
返回结果。
{"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
是在 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"}}
当你在
RAILS_ENV=production bundle exec rails server
上运行时,ActiveRecord::Base.configurations
是相关的。{"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"}}
RAILS_ENV=production bundle exec rails console -e production
吗?我曾经遇到一个问题,RAILS_ENV=production 没有在生产模式下启动控制台,我不得不使用 -e 选项。 - coding addictedrails s
运行服务器并发出请求时会发生什么? - Малъ СкрылевъAPP_DATABASE_PASSWORD=password RAILS_ENV=production bundle exec rails console
无法正常工作。我不明白为什么会这样。以下是ActiveRecord::Base.configurations
的相关输出:"password"=>nil
。 - Nicos KaralisActiveRecord::Base.configurations
显示什么? - Малъ Скрылевъ