Heroku部署后Django(djongo)无法连接到MondoDB Atlas
Posted
技术标签:
【中文标题】Heroku部署后Django(djongo)无法连接到MondoDB Atlas【英文标题】:Django(djongo) can't connect to MondoDB Atlas after Heroku deployment 【发布时间】:2021-08-05 09:11:04 【问题描述】:我设法让它在本地工作(不同的集群,单独的 settings.py),但在部署到 Heroku 之后就不行了。
Heroku - 使用 postgresql 自动添加 DATABASE_URL 配置变量,我无法删除/编辑它。
MongoDB Atlas - 我已将 MongoDB Atlas 集群设置为允许来自任何地方的 IP。并且密码没有有趣的字符。
django 生产设置.py
DATABASES =
'default':
'ENGINE': 'djongo',
'NAME': 'DBProd',
'CLIENT':
'host': "mongodb+srv://XXX:YYY@ZZZ.pc4rx.mongodb.net/DBProd?retryWrites=true&w=majority",
我在部署后直接运行迁移,一切正常
heroku run python manage.py migrate
一切正常,只是数据没有存储在 MongoDB Atlas 集群中。有很多来自各个网站的帖子,但它们都有不同的说明......我尝试关注的一些帖子:
https://developer.mongodb.com/how-to/use-atlas-on-heroku/ Django + Heroku + MongoDB Atlas (Djongo) = DatabaseError with No Exception Connecting Heroku App to Atlas MongoDB Cloud service-- 一个很迷茫的初学者
【问题讨论】:
我删除了 postgresql 插件。但是现在当我尝试从 herokuapp 添加数据时,我得到“服务器错误(500)”。 “MongoDB 读写操作”图表上有一些时刻,所以我猜它已连接但某些配置不匹配? 【参考方案1】:对于任何人来说。在'host'
下方添加'authMechanism': 'SCRAM-SHA-1',
将解决此问题。
【讨论】:
【参考方案2】:这也发生在我身上,就我而言,Heroku 以某种方式将 postgresql 添加为我的应用程序的附加组件,因此必须先将其删除。 查看有关 postgresql 以及如何销毁附加组件的 Heroku 文档: https://devcenter.heroku.com/changelog-items/438
https://devcenter.heroku.com/articles/managing-add-ons
然后您需要通过在您的数据库 URL 中添加 MONGODB_URI config var
来将 MongoDB 配置为您的数据库。您现在应该准备好连接到您的 MongoDB!
以下文档也有帮助: https://www.mongodb.com/developer/how-to/use-atlas-on-heroku/
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review【参考方案3】:我也遇到了同样的问题。在本地一切正常。问题是在 Heroku 上部署时。我添加了'authMechanism': 'SCRAM-SHA-1'
,并且我还通过添加MONGODB_URI config var
将MongoDB 配置为我的数据库。 Heroku 仍然使用postgresql
自动配置DATABASE_URL config var
,我无法删除/编辑它。
在我的 javascript 代码中,我使用了我在 urls.py
中指定的 fetch('127.0.0.1:8000/<something>')
,这样 views.py
从 pymongo 读取数据并将其作为响应返回。
在将我的应用程序部署到 Heroku(并将 127.0.0.1:8000
硬编码为 <myappname>.heroku.com
)后,相同的 fetch 方法似乎返回 [] 而不是包含来自 MongoDB 的值的 json。
这是我在一篇文章中发现的最相同的问题,我希望我没有跑题。
【讨论】:
以上是关于Heroku部署后Django(djongo)无法连接到MondoDB Atlas的主要内容,如果未能解决你的问题,请参考以下文章
部署到 Heroku 时 Django 应用程序崩溃 - Worker 无法启动
由于 PyWin32,无法将 Django 应用程序部署到 Heroku
Django - 无法使用两个数据库进行测试(带有 gis 扩展的 postgres 和 mongoDB (Djongo)
如何在 heroku 上部署 django+swamp dragon 实时聊天应用程序?