【发布时间】:2015-08-14 01:10:55
【问题描述】:
我正在尝试使用 Sinatra 和 PostgreSQL 在 Heroku 上建立一个站点。它在本地工作(连接到本地数据库),但在将其推送到 Heroku 并更改我的 PG.connect 以反映这一点后,当页面尝试访问数据库时,我得到 Internal Server Error。
require 'uri'
require 'pg'
uri = URI.parse(ENV['DATABASE_URL'])
def db(uri)
begin
connection = PG.connect(uri.hostname, uri.port, nil, nil, uri.path[1..-1], uri.user, uri.password)
yield(connection)
ensure
connection.close
end
end
我很确定这些解析正确,因为ENV['DATABASE_URL'] 显示了我所期望的完整的postgres://user:password@host:port/database 信息,如果我在 IRB uri.hostname、ui.port 等中执行相同操作,都会返回预期的内容.
这是我第一次尝试让网站在 Heroku 上运行,所以我什至不知道如何解决这个问题。 (昨天我用谷歌搜索了大约所有内容。)
heroku pg 的结果:
=== DATABASE_URL
Plan: Hobby-dev
Status: Available
Connections: 0/20
PG Version: 9.4.2
Created: 2015-05-30 19:24 UTC
Data Size: 17.7 MB
Tables: 5
Rows: 9320/10000 (In compliance, close to row limit)
Fork/Follow: Unsupported
Rollback: Unsupported
当我从 cli 执行 heroku pg:psql <database> 时,所有表格都会显示。
我看到的一些答案说要将database.yml添加到我的根应用程序目录中,所以:
production:
adapter: 'postgresql'
database: '<database>'
host: ENV['DATABASE_URL']
username: '<username>'
我可能遗漏了一些简单的东西,但我还没有看到关于 Heroku 的 Sinatra/PSQL 的完整指南 - 没有专门针对设置和连接到数据库的内容。 (一切似乎都与 Rails 相关。)
【问题讨论】:
-
你的日志怎么说?
-
不知道为什么我没有收到回复的电子邮件警报...日志只是说“nil 类没有方法'close'”,所以
PG.connect没有找到数据库并返回 nil -
如果无法连接,
PG.connect不应该引发错误吗? -
我是这么认为的。在本地测试它,如果我提供一个不存在的数据库,它会引发
PG::ConnectionBad错误。如果我提供零个参数或nil,它会返回一个PG::Connection对象,它可以是.closed。所以我真的不确定它是如何到达close而不事先给出错误或返回连接对象
标签: ruby postgresql heroku sinatra