PythonAnywhere项目无法连接MongoDB的解决方案求助
解决PythonAnywhere连接MongoDB Atlas被拒绝的问题
你遇到的ServerSelectionTimeoutError和Connection refused错误,除了IP白名单问题,还可能由以下几个原因导致,按步骤排查:
重新确认MongoDB Atlas白名单配置
即使设置了0.0.0.0/0允许所有IP,也要检查是否点击了保存变更按钮,Atlas的配置不会自动生效。另外,确认是在目标集群对应的「Network Access」页面进行的配置,避免选错了项目或集群。添加PythonAnywhere的具体出站IP到白名单
PythonAnywhere的服务器有固定的出站IP段,直接使用泛IP可能存在缓存或规则优先级问题。在PythonAnywhere控制台的「Account」→「View outbound IP addresses」里获取所有出站IP,将这些IP逐个添加到MongoDB Atlas的白名单中。检查连接字符串的正确性
- 确认用户名、密码无误,若密码包含特殊字符(如
@、#),需要进行URL编码(例如@替换为%40) - 确保连接字符串包含SSL参数,MongoDB Atlas强制要求SSL连接,正确的连接字符串格式示例:
from pymongo import MongoClient client = MongoClient("mongodb+srv://your_username:your_encoded_password@ac-azn1hc8.voifniy.mongodb.net/?retryWrites=true&w=majority&ssl=true")
- 确认用户名、密码无误,若密码包含特殊字符(如
测试网络连通性
在PythonAnywhere的bash控制台执行以下命令,测试能否连接到MongoDB节点:telnet ac-azn1hc8-shard-00-00.voifniy.mongodb.net 27017如果命令返回
Connection refused,说明PythonAnywhere的出站流量被限制,需要确认平台是否允许访问27017端口(默认是允许的,若有问题可联系PythonAnywhere支持)。升级pymongo版本
旧版本的pymongo可能与MongoDB Atlas的协议不兼容,执行以下命令升级到最新稳定版:pip install --upgrade pymongo
错误信息参考:
File "/home/kaymapalo/.local/lib/python3.10/site-packages/pymongo/topology.py", line 259, in _select_servers_loop raise ServerSelectionTimeoutError( pymongo.errors.ServerSelectionTimeoutError: ac-azn1hc8-shard-00-01.voifniy.mongodb.net:27017: [Errno 111] Connection refused (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms),ac-azn1hc8-shard-00-00.voifniy.mongodb.net:27017: [Errno 111] Connection refused (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms),ac-azn1hc8-shard-00-02.voifniy.mongodb.net:27017: [Errno 111] Connection refused (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms), Timeout: 30s, Topology Description: <TopologyDescription id: 65c7e303c81ca1b232fdfb16, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('ac-azn1hc8-shard-00-00.voifniy.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-azn1hc8-shard-00-00.voifniy.mongodb.net:27017: [Errno 111] Connection refused (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)')>, <ServerDescription ('ac-azn1hc8-shard-00-01.voifniy.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-azn1hc8-shard-00-01.voifniy.mongodb.net:27017: [Errno 111] Connection refused (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)')>, <ServerDescription ('ac-azn1hc8-shard-00-02.voifniy.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-azn1hc8-shard-00-02.voifniy.mongodb.net:27017: [Errno 111] Connection refused (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)')>]>
内容的提问来源于stack exchange,提问作者Mapalo Kanyanta
相关产品推荐
相关产品推荐

