Ruby Sinatra/Postgres - 无法使用 PG.connect 连接到 heroku 数据库?
Ruby Sinatra/Postgres - can't connect to heroku database with PG.connect?
我正在尝试使用 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,等等所有 return 预期的内容。
这是我第一次尝试让网站在 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 有关。)
在您的 database.yml
文件中,您需要为 host
条目指定正确的主机。您正在传递存储在 DATABASE_URL
中的内容(类似于 postgres://user:password@host:port/database
),但它应该只是主机。
如果它不是 PostgreSQL 的默认端口,您还需要指定一个端口。
编辑:还应该指出,如果您打算将主机(或其他任何东西 - 您绝对应该用于用户名和密码)存储在环境变量中,您需要将其包装起来,例如<%= ENV['HOST'] %>
,而不仅仅是 ENV['HOST']
(即上面 database.yml 摘录中的内容)
我正在尝试使用 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,等等所有 return 预期的内容。
这是我第一次尝试让网站在 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 有关。)
在您的 database.yml
文件中,您需要为 host
条目指定正确的主机。您正在传递存储在 DATABASE_URL
中的内容(类似于 postgres://user:password@host:port/database
),但它应该只是主机。
如果它不是 PostgreSQL 的默认端口,您还需要指定一个端口。
编辑:还应该指出,如果您打算将主机(或其他任何东西 - 您绝对应该用于用户名和密码)存储在环境变量中,您需要将其包装起来,例如<%= ENV['HOST'] %>
,而不仅仅是 ENV['HOST']
(即上面 database.yml 摘录中的内容)