【发布时间】:2021-04-25 00:27:15
【问题描述】:
我遇到了一个不寻常的问题: 我在数字海洋应用程序平台上成功部署了一个 Django 应用程序,但问题是,每当我试图到达任何由于 MongoDB 连接问题而需要数据库应用程序崩溃的路线时,一段时间后我看到
上游连接错误或在标头之前断开/重置。重置原因:连接终止
当我检查日志时,我看到了来自 pymongo 的 ServerSelectionTimeoutError
所以我检查的第一件事是正确的主机 URL,因为使用相同的凭据我可以通过 python 程序从本地电脑连接和查询数据 我按照格式:
"mongodb:srv//myusername:mypassword@clustername.mongodb.net/mydbname 我的密码不包含任何特殊字符
在我的 Django 应用设置中,我放置了所有必需的变量以使 Django 与 MongoDB 一起工作 - 我使用 djongo 作为引擎
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'stocks',
'HOST': os.getenv("DB_HOST"),
'USER': os.getenv("DB_USERNAME"),
'PASSWORD': os.getenv("DB_PASSWORD")
}
}
我在 App 平台控制台中检查了所有变量设置正确
另一件事是,如果我在数字海洋的应用程序控制台中直接在服务器上运行 python shell,我会立即收到不同的错误,但是从已部署的网站访问时,需要一些时间才能获得上述错误:
pymongo.errors.OperationFailure: Authentication failed., full error: {'ok': 0, 'errmsg': 'Authentication failed.', 'code': 8000, 'codeName': 'AtlasError'}
我对 Web 开发还是有点陌生,这可能是我的第 5 个应用程序,连接到 MongoDB 时从来没有遇到任何问题,所以也许我缺少一些东西。第一次在这里提问提前感谢任何人任何帮助将不胜感激:)
【问题讨论】:
-
Authentication Failure通常与错误的用户和密码有关。我没有将 MongoDB 与 Django 一起使用,所以不能肯定地说,但以下内容可能会有所帮助: 1. 检查您的数据库服务器的主机:端口是否为传入连接打开 2. 打印环境变量并查看它们是否符合您的预期 -
嘿,谢谢,但用户名和密码是正确的,因为使用完全相同的凭据我从我的 PC 连接到 DB 没有问题,但从数字海洋应用平台上的服务器无法连接。我检查的变量是正确的。
标签: django mongodb deployment database-connection digital-ocean