【问题标题】:Connect to Postgres on Heroku with Django properly使用 Django 正确连接到 Heroku 上的 Postgres
【发布时间】:2022-12-16 19:00:27
【问题描述】:

我是 Django 和 Heroku 的新手。 考虑到所有凭据和 DATABASE_URL 都可以更改这一事实,我对如何从我的 Django 应用程序连接到 Heroku 上的 Postgres 数据库感到困惑。 首先,为了连接到我在 Heroku 上的 Postgres,我首先使用环境变量并将它们硬编码到我的 Heroku 仪表板中。 然后我发现这是一种不好的做法,因为可以更改这些值。

我检查了this guide by Heroku,他们建议将其添加到设置中:

DATABASES['default'] = dj_database_url.config(conn_max_age=600, ssl_require=True)

这样,我将 DATABASE_URL 添加到我的 .env 文件中——否则 URL 将为空。现在我可以在我的数据库中获取所有正确的数据库凭据,这些凭据与我的仪表板中的相同。到一半了。

然后我从我的 Heroku 仪表板中删除了所有硬编码的环境变量。

然后当我尝试heroku run python src/manage.py migrate -a myapp数据时,我收到一个错误:

django.db.utils.OperationalError: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
    Is the server running locally and accepting connections on that socket?

据我了解,问题是它无法连接到数据库(可能是因为我删除了环境变量)。

从我在互联网上看到的情况来看——很多人在他们关于迁移到 Heroku 上的 Postgres 的指南中使用硬编码环境变量方法——这是一种不好的做法。 否则,Heroku 的指南不会具体说明我们应该如何使用动态更新的凭据连接到数据库。

请指教。

【问题讨论】:

  • DATABASES['default'] = dj_database_url.config(conn_max_age=600, ssl_require=True) 是您设置文件中的最后一条语句吗?您确定已部署包含此行的代码吗?
  • @Chris 是的,这是最后一句话。成为最后一个有多重要?而且我忘了推送我的最新代码 :) 我做到了 - 并解决了问题。谢谢!
  • 我很高兴你让它工作了。这不一定是最后一条语句,但将它放在最后保证您不会修改文件中其他地方的 DATABASES['default'] 的值。例如,如果将它放在正常的 DATABASES 配置之上,它将被覆盖。

标签: django postgresql heroku


【解决方案1】:

@Chris,我在将数据库与 Heroku DB 连接时遇到了同样的问题。 我有两个问题 - 我可以在 settings.py 中保留我的数据库配置吗,因为我有 dj_database_irl 或者它不是必需的。 这是我在纽约学校的第一个 Django 应用程序,我不确定将 Heroku DB 配置的凭据放在哪里。 我将它们放在 settings.py 上,但在我的 PyCharm 中连接失败。 我只是连接并进行迁移,但无法在 PyCharm 上显示数据库。

【讨论】:

    猜你喜欢
    • 2016-10-29
    • 2018-07-13
    • 2016-08-14
    • 2021-01-29
    • 2017-09-13
    • 2019-02-04
    • 2018-12-28
    • 2020-09-16
    • 2020-03-03
    相关资源
    最近更新 更多