【问题标题】:Mongodb connection error from digitalocean app platform来自digitalocean应用平台的Mongodb连接错误
【发布时间】: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


【解决方案1】:

对于将来遇到同样问题的人:) 解决方案是在 Django 数据库设置文件中再指定两个键:

  • authSource - 我设置为管理员
  • authMechanism - 我设置为 SCRAM-SHA-1

不确定哪一个解决了这个问题。现在对我来说,Django 的 settings.py 中正确的连接语法如下所示:

    DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'stocks',
        'CLIENT': {
            'host': os.getenv("DB_HOST"),
            'username': os.getenv("DB_USERNAME"),
            'password': os.getenv("DB_PASSWORD"),
            'authSource': 'admin',
            'authMechanism': 'SCRAM-SHA-1'
        }
    }
}

特别感谢@BellyBuster :)

【讨论】:

    【解决方案2】:

    您很可能需要在 Atlas 中将调用服务器的 IP 地址列入白名单。

    【讨论】:

    • 嘿,谢谢,但事实并非如此,因为所有流量都是允许的 - 我把 0.0.0.0/0 值放在那里
    • 非常感谢,它解决了我的问题,我在这么小的事情上浪费了很多时间:D
    猜你喜欢
    • 2022-08-05
    • 1970-01-01
    • 2020-09-16
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2021-01-30
    • 1970-01-01
    相关资源
    最近更新 更多