【问题标题】:Database connection error at Heroku: connect web app to PostgresqlHeroku 的数据库连接错误:将 Web 应用程序连接到 Postgresql
【发布时间】:2020-11-03 15:29:52
【问题描述】:

我正在尝试在 heroku 中部署在 fastapi 上编写的应用程序并将其连接到数据库。 为此,我已将 heroku-postgres (hobbi-dev) 添加到创建的项目中,然后在我的 Web 应用程序代码中使用数据库凭据。

DATABASE_URL = "postgresql://qpvnasuzcvdwee:d3aecc71083e8f279851285095d9a8cb33f470c5838badaedc5ff1e3ce2df9c5@localhost:5432/detdicolajotpa"

# SQLAlchemy
engine = create_engine(DATABASE_URL)
metadata = MetaData()

# databases query builder
database = Database(DATABASE_URL)

但是在 log cosole 我得到了

2020-07-14T09:51:16.906646+00:00 heroku[web.1]: Starting process with command `gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app`
2020-07-14T09:51:19.630398+00:00 app[web.1]: [2020-07-14 09:51:19 +0000] [4] [INFO] Starting gunicorn 20.0.4
2020-07-14T09:51:19.631018+00:00 app[web.1]: [2020-07-14 09:51:19 +0000] [4] [INFO] Listening at: http://0.0.0.0:8499 (4)
2020-07-14T09:51:19.631118+00:00 app[web.1]: [2020-07-14 09:51:19 +0000] [4] [INFO] Using worker: uvicorn.workers.UvicornWorker
2020-07-14T09:51:19.636402+00:00 app[web.1]: [2020-07-14 09:51:19 +0000] [10] [INFO] Booting worker with pid: 10
2020-07-14T09:51:19.645490+00:00 app[web.1]: [2020-07-14 09:51:19 +0000] [11] [INFO] Booting worker with pid: 11
2020-07-14T09:51:19.707669+00:00 app[web.1]: [2020-07-14 09:51:19 +0000] [12] [INFO] Booting worker with pid: 12
2020-07-14T09:51:19.759618+00:00 app[web.1]: [2020-07-14 09:51:19 +0000] [15] [INFO] Booting worker with pid: 15
2020-07-14T09:51:20.176702+00:00 heroku[web.1]: State changed from starting to up
2020-07-14T09:51:22.153843+00:00 app[web.1]: [2020-07-14 09:51:22 +0000] [12] [ERROR] Exception in worker process
2020-07-14T09:51:22.153882+00:00 app[web.1]: Traceback (most recent call last):
2020-07-14T09:51:22.153884+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2339, in _wrap_pool_connect
2020-07-14T09:51:22.153885+00:00 app[web.1]:     return fn()
2020-07-14T09:51:22.153886+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 364, in connect
2020-07-14T09:51:22.153887+00:00 app[web.1]:     return _ConnectionFairy._checkout(self)
2020-07-14T09:51:22.153887+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 778, in _checkout
2020-07-14T09:51:22.153887+00:00 app[web.1]:     fairy = _ConnectionRecord.checkout(pool)
2020-07-14T09:51:22.153888+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 495, in checkout
2020-07-14T09:51:22.153889+00:00 app[web.1]:     rec = pool._do_get()
2020-07-14T09:51:22.153889+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/impl.py", line 140, in _do_get
2020-07-14T09:51:22.153890+00:00 app[web.1]:     self._dec_overflow()
2020-07-14T09:51:22.153890+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 69, in __exit__
2020-07-14T09:51:22.153890+00:00 app[web.1]:     exc_value, with_traceback=exc_tb,
2020-07-14T09:51:22.153891+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
2020-07-14T09:51:22.153891+00:00 app[web.1]:     raise exception
2020-07-14T09:51:22.153891+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/impl.py", line 137, in _do_get
2020-07-14T09:51:22.153891+00:00 app[web.1]:     return self._create_connection()
2020-07-14T09:51:22.153892+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 309, in _create_connection
2020-07-14T09:51:22.153892+00:00 app[web.1]:     return _ConnectionRecord(self)
2020-07-14T09:51:22.153892+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 440, in __init__
2020-07-14T09:51:22.153893+00:00 app[web.1]:     self.__connect(first_connect_check=True)
2020-07-14T09:51:22.153893+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 661, in __connect
2020-07-14T09:51:22.153895+00:00 app[web.1]:     pool.logger.debug("Error on connect(): %s", e)
2020-07-14T09:51:22.153895+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 69, in __exit__
2020-07-14T09:51:22.153895+00:00 app[web.1]:     exc_value, with_traceback=exc_tb,
2020-07-14T09:51:22.153895+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
2020-07-14T09:51:22.153896+00:00 app[web.1]:     raise exception
2020-07-14T09:51:22.153896+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 656, in __connect
2020-07-14T09:51:22.153896+00:00 app[web.1]:     connection = pool._invoke_creator(self)
2020-07-14T09:51:22.153897+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/strategies.py", line 114, in connect
2020-07-14T09:51:22.153897+00:00 app[web.1]:     return dialect.connect(*cargs, **cparams)
2020-07-14T09:51:22.153897+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 493, in connect
2020-07-14T09:51:22.153898+00:00 app[web.1]:     return self.dbapi.connect(*cargs, **cparams)
2020-07-14T09:51:22.153898+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py", line 127, in connect
2020-07-14T09:51:22.153898+00:00 app[web.1]:     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
2020-07-14T09:51:22.153899+00:00 app[web.1]: psycopg2.OperationalError: could not connect to server: Connection refused
2020-07-14T09:51:22.153899+00:00 app[web.1]:    Is the server running on host "localhost" (127.0.0.1) and accepting
2020-07-14T09:51:22.153899+00:00 app[web.1]:    TCP/IP connections on port 5432?

据我了解,这个字符串psycopg2.OperationalError: could not connect to server: Connection refused 报告了与基地的连接问题。 你能告诉我我做错了什么吗?在具有类似设置的本地计算机上,一切正常。

【问题讨论】:

    标签: python-3.x postgresql heroku sqlalchemy fastapi


    【解决方案1】:

    如果您使用的是psycopg2,则需要为 Heroku 安装 psycopg2-binary

    获取连接参数os.environ,不要尝试直接连接,t是Heroku Postgres的Heroku推荐的解决方案

    DATABASE_URL = os.environ.get('DATABASE_URL')
    

    您不应将凭据放入您的代码中,它们已被盗用,请确保在通过 Heroku 控制台使用 heroku pg:credentials --reset 部署您的应用之前重置它们。

    【讨论】:

    • 很抱歉回复晚了,我没有机会检查您的解决方案。据我现在所见,数据库连接错误消失了。谢谢你的建议。
    • 您是否更改了您的凭据,我认为有人可以使用您的 heroku posgres 凭据访问您的数据库。
    • 如果您在问题中谈论凭据,那是假值。
    猜你喜欢
    • 2014-06-25
    • 2014-03-04
    • 2013-10-07
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    相关资源
    最近更新 更多