ActiveRecord尝试使用rbenv

时间:2016-03-21 08:40:47

标签: ruby-on-rails postgresql activerecord passenger rbenv

在网站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

1 个答案:

答案 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