将 Django 与 MongoEngine 结合使用时,M0 集群出现 ReplicaSetNoPrimary 错误

问题描述 投票:0回答:1

我正在使用 django 和 mongoengine。我在 settings.py 文件中写入以下内容:

from mongoengine import connect
URI = 'mongodb+srv://myusername:[email protected]/django?retryWrites=true&w=majority&ssl=false'
connect(host=URI)

之后,我的模型如下:

from mongoengine import Document, StringField
class User(Document):
    first_name = StringField(max_length=50)
    last_name = StringField(max_length=50)

    meta = {
        'collection': 'users'
    }

我的看法如下:

def adduser(request):
    userDict = json.loads(request.body)
    newUser = User(first_name=userDict['firstName'],last_name=userDict['lastName'])
    newUser.save()
    return HttpResponse('user added')

当调用这个视图函数时,出现如下错误:

ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: cluster0-shard-00-02.5apjp.mongodb.net:27017: 
connection closed (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 
20000.0ms),cluster0-shard-00-01.5apjp.mongodb.net:27017: connection closed (configured timeouts:
 socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms),cluster0-shard-00-00.5apjp.mongodb.net:27017: 
connection closed (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms),
 Timeout: 30s, Topology Description: <TopologyDescription id: 65c3bdc13c9136a1191890e1, 
topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('cluster0-shard-00-00.5apjp.mongodb.net', 27017) 
server_type: Unknown, rtt: None, error=AutoReconnect('cluster0-shard-00-00.5apjp.mongodb.net:27017: 
connection closed (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)')>, 
<ServerDescription ('cluster0-shard-00-01.5apjp.mongodb.net', 27017) 
server_type: Unknown, rtt: None, error=AutoReconnect('cluster0-shard-00-01.5apjp.mongodb.net:27017: 
connection closed (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)')>, 
<ServerDescription ('cluster0-shard-00-02.5apjp.mongodb.net', 27017) 
server_type: Unknown, rtt: None, error=AutoReconnect('cluster0-shard-00-02.5apjp.mongodb.net:27017: 
connection closed (configured timeouts: socketTimeoutMS: 20000.0ms, 
connectTimeoutMS: 20000.0ms)')>]>
[07/Feb/2024 23:02:38] "POST /user/adduser HTTP/1.1" 500 115166

我正在使用 mongodb 免费 M0 集群,数据库名为“django”,集合名为“users”。

如果我使用非 SRV URI 字符串(如 localhost:27017),它可以正常工作。但是当我使用 SRV URI 时,它给了我这个错误。

此外,我在 MongoDB Atlas UI 的“网络访问”选项卡的 IP 访问列表中添加了 0.0.0.0/0。

请帮助我消除此错误,以便我可以使用 Django 和 MongoEngine 在 MongoDB 上继续进行基本的 CRUD 操作。

python django mongodb crud mongoengine
1个回答
0
投票

MongoDB Atlas 服务器要求所有客户端连接使用 SSL/TLS。

mongodb+srv协议隐式启用TLS。

ssl=false
放入连接字符串中会覆盖隐式默认值,导致尝试在不使用 SSL/TLS 的情况下进行连接。

由于不允许非加密连接,服务器会立即关闭连接而不回复,这看起来很像连接后出现网络错误。

从连接字符串中删除

ssl=false
进行连接。

© www.soinside.com 2019 - 2024. All rights reserved.