Heroku拒绝连接到PostgreSQL数据库。

4

我正在尝试在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中的localhost替换为ec2-23-21-215-184.compute-1.amazonaws.com,但是出现了相同的错误。这里是执行db.create_all()时完整的回溯信息。请问您有什么想法,为什么连接会被拒绝以及如何解决这个问题?

如果您从cli中获取到此内容,那么很明显要么pg未运行,要么它没有监听tcp,或者它没有在该ip:port组合上进行监听。 - Marc B
如果是Linux,您应该检查服务。看起来这两个错误不会相同,因为psql无法提供psycopg错误,从cli获取详细的错误日志将更有帮助。 其他选择是检查服务、防火墙和端口本身的状态。 还要确保对数据库有适当的权限。 - manugupt1
我通过添加回溯信息编辑了问题,但不确定如何检查服务。我需要深入挖掘一下如何做到这一点。 - multigoodverse
请参阅 Heroku 文档中的 SSL 部分(https://devcenter.heroku.com/articles/connecting-to-heroku-postgres-databases-from-outside-of-heroku#ssl)。 - c0dem4gnetic
@c0dem4gnetic 这是一个线索,但我认为我是在服务器内部运行它。我的应用程序文件已经部署,我正在一个由heroku run bash打开的bash中输入该代码。服务器不会将我给予bash的命令视为内部连接吗?我认为“外部”是指如果我在本地运行脚本并指向远程数据库。 - multigoodverse
1个回答

0

看起来我需要在数据库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"

3
提示:使用 os.environ['DATABASE_URL'] 来获取连接参数。1)这是Heroku的推荐解决方案(请阅读 http://12factor.net 了解背景知识)。2)您不应该在代码中放置凭据。3)这样做将使您能够旋转凭据(通过 heroku pg:credentials --reset),而无需重新部署代码。 - bimsapi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接