问题
在生产环境中使用我的 rails 应用程序会导致 500 错误。检查生产日志的结果是:gist。检查详细的 postgresql 日志会导致:gist(实际的数据库凭据已被替换)。无论 database.yml 文件中指定了什么,postgres 日志都会显示每次连接尝试时端口号的增量。
环境
服务器:Ubuntu 12.10 (GNU/Linux 3.5.0-17-generic i686)
机架服务器:独角兽
导轨 v: 3.2.13
Ruby v: 1.9.3p0(真的很老,也许这里有问题?)
我试过的
仔细检查 database.yml:
尝试使用和不使用主机和端口,检查缩进并验证 yaml 格式。
production:
adapter: postgresql
database: <db_production>
username: <db_user>
password: <db_password>
host: localhost
port: 5432
运行 rake、rails c 和 rails db:
我可以登录并成功运行所有这些命令。我必须在这里指定环境,也许这是问题所在?环境没有以某种方式设置吗?
bundle exec rails db production
跑步:
Rails.env?
导致生产,但这是在明确登录到 rails c 生产之后。
更改 pg_hba.conf:
我尝试了在其他 SO 问题中找到的几个设置。本地的原始设置是:
local all all peer
然后尝试:
local all all md5
然后尝试:
local all all trust
在所有这些更改之后,我确保重新启动 pg 或 pg_ctl reload 以获取更改。
登录到 pg outside 或 rails:
即使在每次更改 pg_hba.conf 之后,我仍然可以使用 database.yml 中的相同凭据登录到我的生产数据库并查看我的所有数据,并确认所有迁移和数据库创建都已运行。
跑步:
sudo -u <db_user> psql <db_production>
按预期工作。
结论
对我来说很明显,问题不在于 postgres,而在于 rails 配置,也许环境没有切换到生产环境,因此它正在尝试使用 dev db creds?这在我的生产 yml 文件中不存在。