【问题标题】:Heroku refuses connection to postgres databaseHeroku 拒绝连接到 postgres 数据库
【发布时间】:2016-08-12 02:59:16
【问题描述】:

我正在尝试在 Heroku 上部署基于 PostgreSQL 的 Flask 应用程序,但是当我尝试使用 db.create_all() 创建表时,我不断收到此错误:

(psycopg2.OperationalError) could not connect t
rver: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?

我的代码如下所示:

app=Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI']='postgres://kfgriimpfjecsv:Bk1*****G@localhost:5432/dd71doth8gopgh'
db=SQLAlchemy(app)
if __name__ == '__main__':
    app.debug=True
    app.run()

我正在使用 Heroku Toolbelt 与 Heroku 服务器进行通信。另外,当我尝试这个时:

psql -p 5432 -h localhost

我得到几乎相同的错误:

psql: could not connect to server: Connection refused
        Is the server running on host "localhost" (127.0.0.1) and accepting
        TCP/IP connections on port 5432?

我也尝试在 URI 中使用 ec2-23-21-215-184.compute-1.amazonaws.com 而不是 localhost,但得到了同样的错误。

here 是我运行 db.create_all() 时得到的完整回溯:

知道为什么连接被拒绝以及如何解决这个问题吗?

【问题讨论】:

  • 如果你也从 cli 获取它,那么显然 pg 没有运行,它没有监听 tcp,或者它没有监听那个 ip:port 组合。
  • 如果是 linux 你应该检查服务。看起来这两个错误并不相同,只是因为 psql 不能给出 psycopg 错误,所以来自 cli 的详细错误日志会更有帮助。其他替代方法是检查服务、防火墙和端口本身的状态。对数据库也有适当的权限。
  • 我通过添加回溯编辑了问题,但不确定如何检查服务。我将不得不深入研究如何做到这一点。
  • 查看 Heroku 文档的 SSL 部分 (devcenter.heroku.com/articles/…)。
  • @c0dem4gnetic 这是一个线索,但我认为我是从服务器内部运行的。我的应用程序文件已部署,我在 bash 中键入该代码,我从计算机终端使用heroku run bash 打开该代码。服务器不认为我给 bash 的命令是内部连接吗?我认为“外部”意味着如果我在本地运行脚本并指向远程数据库。

标签: python postgresql ssl heroku


【解决方案1】:

看来我必须在数据库 URI 中附加一个 sslmode 参数,因此将第二行更改为以下内容即可解决问题:

app.config['SQLALCHEMY_DATABASE_URI']= "postgresql+psycopg2://kfgriimpfjecsv:Bk1*******G@ec2-23-21-215-184.compute-1.amazonaws.com:5432/dd71doth8gopgh?sslmode=require"

【讨论】:

  • 提示:使用os.environ['DATABASE_URL']获取连接参数。 1)这是 Heroku 推荐的解决方案(阅读 12factor.net 了解背景)2)您不应将凭据放入代码中,3)这样做可以让您在不重新部署代码的情况下轮换凭据(通过 heroku pg:credentials --reset)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 2015-07-10
  • 2021-06-21
  • 1970-01-01
  • 2023-02-14
  • 2014-05-28
  • 2021-02-06
相关资源
最近更新 更多