heroku pg:sql --app <app_name>尝试连接错误的主机

EK0*_*EK0 2 postgresql heroku pg psql

我刚刚在heroku上部署了我的生产应用程序.

我仍然可以使用以下方法访问我的临时数据库:

heroku pg:psql --app staging-app
Run Code Online (Sandbox Code Playgroud)

但是当我尝试为生产做同样的事情时:

heroku pg:psql --app production-app
Run Code Online (Sandbox Code Playgroud)

我得到一个连接超时和一个错误,说主机xxx没有侦听端口5432.

当我访问heroku网站并获取生产数据库的设置时,它显示它正在主机上运行yyy(即,不是 xxx).任何人都可以告诉我如何获取pg:psql命令连接到正确的主机?

Web服务器似乎连接到数据库没有问题,如果我运行:

heroku run --app production-app rails console
Run Code Online (Sandbox Code Playgroud)

然后我可以通过ActiveRecord查看数据库中的记录.

BTW,命令:

heroku pg:info --app production-app
Run Code Online (Sandbox Code Playgroud)

给出这些结果:

=== 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
Run Code Online (Sandbox Code Playgroud)

EK0*_*EK0 5

显然正确的命令是:

heroku pg:psql HEROKU_POSTGRESQL_MAROON --app production-app
Run Code Online (Sandbox Code Playgroud)

所以,数据库名称和双方--app都需要的参数(出于某种原因,运行这个命令我碰到的所有的例子做一个或另一个,但不能同时).

我猜测,即使因为SHARED_DATABASE数据库的存在指定的应用程序的数据库名称是必需的(该数据库不存在于我的升级应用程序).

顺便说一句,当我意识到我正在使用现已弃用的heroku gem并切换到heroku工具带时,我找到了这个问题的答案,而不是尝试连接到无效的主机并在60秒后超时,实际打印出一个半有用的消息:

 !    Unknown database. Valid options are: HEROKU_POSTGRESQL_MAROON_URL, SHARED_DATABASE
Run Code Online (Sandbox Code Playgroud)

(我认为它是半有用的,因为你必须知道_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
Run Code Online (Sandbox Code Playgroud)

没有问题,最重要的是,我的rake任务在正确的数据库上运行.

希望这有助于其他人.