Rails应用无法连接到PostgreSQL,但rake、rails c和rails db可以。

3

问题

在生产环境中访问我的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文件中不存在。


你应该问自己一个问题,你的应用程序是在哪个环境下启动的? - chrmod
@QumaraSixOneTour 这也让人感到困惑,因为在我的postgresql.conf中,端口明确设置为5432。我可以看到日志中每次有连接尝试时,端口都会递增,所以将端口设置为53920将与下次连接尝试时不同。 - jonlunsford
日志文件中的端口是连接来源的端口,换句话说,客户端使用出站端口53920连接到入站端口5432。 - mattr-
@MattRogers 对,所以在database.yml中明确设置我的端口应该会导致客户端尝试使用5432连接,对吗?启动命令是: bundle exec unicorn -D -c <%= unicorn_config %> -E production,其中独角兽配置路径是在初始设置时生成的。 - jonlunsford
好的,这完全是一个错误的问题。问题出在redactor-rails gem和unicorn不兼容上,应用程序立即崩溃...所以难怪它无法连接。不确定在SO上解决这个问题的最佳方法。 - jonlunsford
显示剩余5条评论
1个回答

1

请总结URI中的步骤,因为该链接可能由于任何原因而无法工作。 - user559633
谢谢您的回复!自初始安装以来,所有服务器均已重新启动,包括Unicorn、Ubuntu和pg。我可以访问 pg 控制台,并可以从中登录到我的应用程序数据库,这使我相信问题不在于 postgres 安装。 - jonlunsford
你在控制台上得到了什么错误? database.yml 确保你写的是正确的用户名和密码。如果你按照我的博客第七步骤操作,默认的用户名将是“postgres”,密码为“unix root password”。 - Pravin Mishra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接