【发布时间】:2016-07-07 16:21:42
【问题描述】:
在站点根目录执行 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。
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开始,shell返回的是ydb,而不是y。
【问题讨论】:
-
你是如何运行服务器的?如果您先使用
export $(cat .rbenv-vars | xargs)导出变量,它是否有效? -
k,试过了,并没有改变错误信息。另外,我正在使用Passenger + Nginx。此外,我还没有对
postgresql.conf或pg_hba.conf文件做任何事情——我在安装时保持不变。 -
您是否尝试通过直接在 database.yml 而不是环境变量中设置值来排除 rbenv 作为罪魁祸首?
-
@Meshpi 好吧,我会很生气的。你是对的,问题似乎在于
rbenv。我将 envars 直接放在database.yml中,现在它按预期工作 -
@singularity 至少我们知道去哪里找。我想知道为什么它读取 rbenv 用户名变量的值作为数据库名称。
标签: ruby-on-rails postgresql activerecord passenger rbenv