问题
在生产环境中访问我的rails应用程序会导致500错误。检查生产日志结果为:gist。检查详细的postgresql日志结果为:gist(实际数据库凭据已被替换)。尽管database.yml文件指定了端口号,但postgres日志显示每次连接尝试都会增加端口号。
环境
服务器: Ubuntu 12.10 (GNU/Linux 3.5.0-17-generic i686)
Rack服务器: Unicorn
Rails版本: 3.2.13
Ruby版本: 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 production。
更改pg_hba.conf:
我尝试了其他SO问题中找到的几个设置。本地的原始设置如下:
local all all peer
尝试了以下方法:
local all all md5
然后尝试:
local all all trust
在进行以上更改后,我确保重新启动pg或使用pg_ctl reload以应用更改。
在rails之外登录pg:
即使对pg_hba.conf进行了每次更改,我仍然可以使用database.yml中相同的凭据登录到生产数据库,并查看所有数据,确认所有迁移和数据库创建都已运行。
运行:
sudo -u <db_user> psql <db_production>
工作正常。
结论
我认为问题并不在于PostgreSQL,而是Rails的配置问题,可能是环境没有切换到生产环境,因此它正在尝试使用开发数据库凭据?这些凭据在我的生产yml文件中不存在。
bundle exec unicorn -D -c <%= unicorn_config %> -E production
,其中独角兽配置路径是在初始设置时生成的。 - jonlunsford