我刚刚在 heroku 上部署了我的生产应用程序。
我仍然可以使用以下方法毫无问题地访问我的登台数据库:
heroku pg:psql --app staging-app
但是当我尝试为生产做同样的事情时:
heroku pg:psql --app production-app
我收到连接超时和一条错误消息,指出主机 xxx 未在端口 5432 上监听。
当我访问 heroku 网站并获取生产数据库的设置时,它显示它正在主机 yyy
上运行(即,不是 xxx
)。谁能告诉我如何让 pg:psql 命令连接到正确的主机?
Web 服务器似乎可以毫无问题地连接到数据库,如果我运行:
heroku run --app production-app rails console
然后我可以通过 ActiveRecord 查看数据库中的记录。
顺便说一句,命令:
heroku pg:info --app production-app
给出这些结果:
=== HEROKU_POSTGRESQL_MAROON
Plan: Dev
Status: available
Connections: 0
PG Version: 9.1.5
Created: 2012-08-08 17:55 UTC
Data Size: 5.9 MB
Tables: 0
Rows: 0/10000 (In compliance)
Fork/Follow: Unavailable
=== SHARED_DATABASE (DATABASE_URL)
Data Size: 600k
最佳答案
显然正确的命令是:
heroku pg:psql HEROKU_POSTGRESQL_MAROON --app production-app
因此,数据库名称和 --app
参数都是必需的(出于某种原因,我遇到的运行此命令的所有示例都执行了一个或另一个,但不是两个)。
我猜测即使指定了应用程序也需要数据库名称,因为存在 SHARED_DATABASE 数据库(该数据库不存在于我的暂存应用程序中)。
顺便说一句,当我意识到我正在使用现已弃用的 heroku gem 并切换到 heroku toolbelt 时,我找到了这个问题的答案,而不是尝试连接到无效主机并在 60 秒后超时,实际上打印了一条半有用的消息:
! Unknown database. Valid options are: HEROKU_POSTGRESQL_MAROON_URL, SHARED_DATABASE
(我将其评为半有用,因为您必须足够了解才能从数据库名称中删除 _URL
部分。)
更新:
在尝试部署我的应用程序时,我发现 rake db:setup
之类的东西无法正常工作,因为它们将转到共享数据库而不是 postgres 数据库。
我取消了共享数据库的配置(请参阅 https://devcenter.heroku.com/articles/migrating-from-shared-database-to-heroku-postgres#3-deprovision-your-shared-database)。这样做之后,我还必须手动将 DATABASE_URL 设置为与 HEROKU_POSTGRESQL_MAROON_URL 相同(文档似乎暗示这将自动发生,但在我的情况下它没有)。
现在我可以运行命令了
heroku pg:psql --app production-app
没有问题,最重要的是,我的 rake 任务在正确的数据库上运行。
希望这对其他人有帮助。
关于postgresql - heroku pg :sql --app <app_name> tries to connect to wrong host,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13035448/