我正在尝试将 Web 应用程序推送到 Heroku,但无法让 Postgres 接受 TCP/IP 连接。我已经浏览了关于这个主题的所有问题/答案,但仍然无法解决这个问题。我是数据库/网络开发的新手,非常感谢任何帮助!
在 postgresql.conf 中,我将监听地址变量从 localhost 更改为 #listen_addresses = ‘*’
。端口看起来正确:#port = 5432
。
我还在 pg_hba.conf
中添加了 0.0.0.0
(这是正确的顺序吗?):
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
host all all 0.0.0.0/0 md5
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
添加该地址后,当我在终端中调用 postgres
时,它运行但出现 fatal error :
LOG: database system was shut down at 2015-09-06 16:21:43 PDT
LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
FATAL: database "admin" does not exist
当我尝试启动 psql
时,同样的消息:
psql: FATAL: database "admin" does not exist
我能够通过另一个数据库连接到 psql
:psql -d template1
并创建了一个新的管理数据库。然后我创建了我的应用程序所需的数据库,并通过使用 Gradle 运行我的项目来确保它可以正常运行。在此过程中,我多次完全停止服务器以查看更改是否有效。
Heroku 日志仍然显示我在更改 Postgres 配置文件之前遇到的相同问题:
Caused by: org.postgresql.util.PSQLException: Connection to
localhost:5432 refused. Check that the hostname and port are correct
and that the postmaster is accepting TCP/IP connections.
当我访问http://localhost:5432/时,它显示“未收到数据”,错误“无法加载网页,因为服务器未发送数据。”
感谢您的帮助!
版本:Mac OSX 10.10.5、PostgreSQL 9.4.4、Heroku 3.41.5、Gradle 2.5、Java 1.8.0_51。全部使用 Homebrew 安装。
最佳答案
在我看来,您正在运行自己的、独立的 Postgres 数据库——这是正确的吗?如果您使用的是 Heroku,很可能——这不是一个好主意。
Heroku 的主要好处之一是它可以为您处理服务器维护/恢复等——这就是它的主要好处 =)
考虑到以上几点,我建议您使用 Heroku Postgres而不是运行您自己的 Postgres 数据库。它不仅是世界上最大的托管 Postgres 服务——它永远存在,基本上没有错误,允许您做很多很棒的事情(立即提供读取从属/备份主控等。 ),甚至还有一个慷慨的免费计划。
真的没有理由不使用它 =)
要使用 Heroku Postgres 进行陈述,您只需说:
$ heroku addons:add heroku-postgresql:dev
这将为您生成一个新数据库,您的应用可以通过名为 DATABASE_URL
的预定义环境变量访问该数据库。只需将该 URL 提供给您的 Web 框架/应用程序代码,并让它连接到它——它包括用户名/密码等,并且应该很容易工作。
您可能还想查看入门指南以获取更多信息:https://devcenter.heroku.com/articles/heroku-postgresql
关于java - 如何配置 PostgreSQL 以允许 TCP/IP 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32429858/