2

我刚刚在 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
4

1 回答 1

5

显然正确的命令是:

heroku pg:psql HEROKU_POSTGRESQL_MAROON --app production-app

因此,数据库名称和--app参数都是必需的(出于某种原因,我遇到的所有运行此命令的示例都做了一个或另一个,但不是两者都做)。

我猜即使由于存在 SHARED_DATABASE 数据库(该数据库在我的登台应用程序中不存在)而指定了应用程序,也需要数据库名称。

顺便说一句,当我意识到我正在使用现已弃用的 heroku gem 并切换到 heroku 工具带时,我找到了这个问题的答案,而不是尝试连接到无效的主机并在 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 任务在正确的数据库上运行。

希望这对其他人有帮助。

于 2012-10-30T22:14:57.340 回答