Ruby Sinatra / Postgres - 无法使用PG.connect连接到heroku数据库?

时间:2015-05-31 14:59:42

标签: ruby postgresql heroku sinatra

我正在尝试使用Sinatra和PostgreSQL在Heroku上建立一个站点。它在本地工作(连接到本地数据库),但在将其推送到Heroku并更改我的PG.connect以反映这一点后,我在页面尝试访问数据库时出现内部服务器错误

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有关。)

1 个答案:

答案 0 :(得分:2)

database.yml文件中,您需要为host条目指定正确的主机。您正在传递DATABASE_URL中存储的内容(类似postgres://user:password@host:port/database),但它应该只是主持人。

如果它不是PostgreSQL的默认端口,您还需要指定一个端口。

编辑:还应该指出你是否打算在你需要包装它的环境变量中存储主机(或其他任何东西 - 你肯定应该输入用户名和密码),例如: <%= ENV['HOST'] %>,而不只是ENV['HOST'](即您在上面的database.yml摘录中的方式)