【发布时间】:2013-04-19 20:19:08
【问题描述】:
问题
在生产环境中点击我的 rails 应用程序会导致 500 错误。检查生产日志的结果是:gist。检查详细的 postgresql 日志会导致:gist(实际的数据库凭据已被替换)。无论 database.yml 文件中指定了什么,postgres 日志都会显示每次连接尝试的端口号递增。
环境
服务器:Ubuntu 12.10(GNU/Linux 3.5.0-17-generic i686)
机架式服务器:独角兽
Rails 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 文件中不存在。
【问题讨论】:
-
我可以看到您使用的端口与
database.yml中指定的端口不同:connection received: host=localhost port=53920。 -
您应该问自己一个问题,您的应用从哪个环境开始?
-
@QumaraSixOneTour 这也是令人费解的地方,因为在我的 postgresql.conf 中,端口被明确设置为 5432。我可以在日志中看到每次尝试连接时端口都会增加,因此设置下次尝试连接时,53920 的端口会有所不同
-
日志文件中的端口是连接来自的端口,换句话说,客户端使用传出端口53920连接到传入端口5432。
-
你能发布你用来启动你的 Rails 服务器的命令吗?
标签: ruby-on-rails ruby postgresql ubuntu