在网站root上执行get请求时在/log/production.log
中收到错误:
I, [2016-03-21T02:21:38.485274 #12750] INFO -- :
Started GET "/" for 174.xx.xxx.xxx at 2016-03-21 02:21:38 -0600
F, [2016-03-21T02:21:38.493250 #12750] FATAL -- :
ActiveRecord::NoDatabaseError (FATAL: database "y" does not exist)
它说database "y" does not exist
。首先,y
不是数据库,所以我知道它不存在。
其次,database.yml
指定ydb
作为应用应连接的数据库 - 而不是y
。
配置/ database.yml中:
production:
adapter: postgresql
encoding: utf8
host: <%= ENV['Y_PG_HOST'] %>
database: <%= ENV['Y_PG_DB'] %>
username: <%= ENV['Y_PG_USER'] %>
password: <%= ENV['Y_PG_PASS'] %>
使用rbenv声明env vars:
.rbenv-VARS
Y_PG_HOST=localhost
Y_PG_DB=ydb
Y_PG_USER=y
Y_PG_PASS=*********
更新
感谢@Meshpi,rbenv
似乎是问题发生的地方。当env变量直接放在database.yml
中时,服务器会按预期加载站点。
令人费解的是,从echo $Y_PG_DB
开始,shell返回ydb
,而不是y
。
答案 0 :(得分:1)
开发工作正常。甚至服务器上的rails console production
也使用app.get '/'
而没有数据库错误。然而,当通过浏览器提出请求时,一切都崩溃了。
问题是Phusion Passenger在安装结束时给出的指令与rbenv-vars不完全兼容。
在Passenger安装结束时,系统会指示您将以下内容添加到nginx.conf
:
passenger_root /home/user/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/passenger-5.0.26;
passenger_ruby /home/user/.rbenv/versions/2.3.0/bin/ruby;
然而,作为@mislav pointed out,Ruby脚本将直接激活ruby进程,而不是通过rbenv。
要解决此问题,需要在nginx.conf
中提供的内容是:
passenger_root /home/user/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/passenger-5.0.26;
passenger_ruby /home/user/.rbenv/shims/ruby;
希望这有助于饶恕另一个毫无戒心的灵魂:D