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)
显然正确的命令是:
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任务在正确的数据库上运行.
希望这有助于其他人.