ActiveRecord 尝试使用 rbenv 连接到错误的数据库
ActiveRecord attempting to connect to the wrong database using rbenv
在站点根目录上执行获取请求时在 /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
。
config/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 声明环境变量:
.rbenv-vars
Y_PG_HOST=localhost
Y_PG_DB=ydb
Y_PG_USER=y
Y_PG_PASS=*********
更新
感谢@Meshpi,看来 rbenv
是问题发生的地方。当环境变量直接放在 database.yml
中时,服务器按预期加载站点。
令人费解的是,从echo $Y_PG_DB
开始,shellreturnsydb
,而不是y
。
开发工作正常。甚至服务器上的 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
在站点根目录上执行获取请求时在 /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
。
config/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 声明环境变量:
.rbenv-vars
Y_PG_HOST=localhost
Y_PG_DB=ydb
Y_PG_USER=y
Y_PG_PASS=*********
更新
感谢@Meshpi,看来 rbenv
是问题发生的地方。当环境变量直接放在 database.yml
中时,服务器按预期加载站点。
令人费解的是,从echo $Y_PG_DB
开始,shellreturnsydb
,而不是y
。
开发工作正常。甚至服务器上的 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