我正在使用:
uWSGI开始PARAMS:
--socket 127.0.0.1:8081 --daemonize --enable-threads --threads 2 --processes 2
设置我的MongoClient ONE时间:
self.mongo_client = MongoClient('mongodb://user:[email protected]:port/mydb')
self.db = self.mongo_client['mydb']
我试着和保存JSON字典到MongoDB的:
result = self.db.jobs.insert_one(job_dict)
它通过执行相同的代码路径MongoDB的单元测试工作。然而,当我通过CherryPy的和uWSGI使用HTTP POST执行,我得到这样的:
pymongo.errors.ServerSelectionTimeoutError: No servers found yet
为什么我看到这种行为时通过的CherryPy和uWSGI运行?在PyMongo 3这也许新的线程模型?
更新:
如果我不跑和uWSGI通过使用CherryPy的nginx的内置的服务器,该insert_one()
工作。
更新1/25下午4点53分美国东部时间:
加入在PyMongo一些调试后,似乎topology._update_servers()
知道,SERVER_TYPE = 2服务器“myserver-a.mongolab.com”。然而server_description.known_servers()
具有SERVER_TYPE = 0服务器“myserver.mongolab.com”
这导致以下堆栈跟踪:
result = self.db.jobs.insert_one(job_dict)
File "/usr/local/lib/python3.4/site-packages/pymongo/collection.py", line 466, in insert_one
with self._socket_for_writes() as sock_info:
File "/usr/local/lib/python3.4/contextlib.py", line 59, in __enter__
return next(self.gen)
File "/usr/local/lib/python3.4/site-packages/pymongo/mongo_client.py", line 663, in _get_socket
server = self._get_topology().select_server(selector)
File "/usr/local/lib/python3.4/site-packages/pymongo/topology.py", line 121, in select_server
address))
File "/usr/local/lib/python3.4/site-packages/pymongo/topology.py", line 97, in select_servers
self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: No servers found yet
我们正在调查这个问题,在PYTHON-961跟踪。您可以通过创建MongoClient的情况下,当通过连接= False来解决此问题。这推迟的后台连接直到第一个数据库操作尝试,避免什么,我怀疑是自旋之间的竞争条件了MongoClient的监视线程和多进程分叉的。
我通过安装dnspython(PIP安装dnspython)解决了这个。问题是,道:“‘dnspython’模块必须安装使用MongoDB的+ SRV://的URI”
此问题已修复与"C:\Program Files\MongoDB\Server\3.6\bin\mongod.exe"
pull_request import pymongo
myclient = pymongo.MongoClient()
mydb = myclient["mydatabase"]
myclient.list_database_names()
。
然后你就可以使用pymongo [蟒蛇提示]
PyMongo
请参阅 - this
如果它可以帮助我解决了更换:
import pymongo
from pymongo import MongoClient
client = MongoClient()
db = client.test_db
collection = db['test_coll']
通过:
https://docs.mongodb.com/tutorials/install-mongodb-on-windows/
我从pymongo 3.0到2.8降级固定它自己。不知道这是怎么回事。
flask/bin/pip uninstall pymongo
flask/bin/pip install pymongo==2.8
我有同样的问题与Pymongo 3.5原来用127.0.0.1或者你的MongoDB实例的对应的IP地址解决问题替换本地主机。
我不知道,如果您使用的AWS云服务配对MongoDB的。但如果你是,我发现,你必须指定你想要的MongoDB有机会获得哪个IP地址。
所以,你需要做的是添加你的主机服务器的IP地址允许进入。
在MongoDB中阿特拉斯,这可以在这个页面qazxsw POI完成
我知道已经有相同的问题的解决方案,但我没有找到一个解决方案,帮助我的情况,所以想后这一点,所以如果他们面对的,我做了同样的问题,其他人可以从中受益。
我遇到同样的问题,终于让我找到客户端IP被蒙戈服务器的防火墙阻止。
我遇到了这一点。
我加入pymongo3 isn't fork safe参数去uwsgi解决这个问题,这可避免“叉安全”问题。
看到uwsgi DOC --lazy-apps
。
请注意,没有确定的这两具有正的连接。
也许你可以尝试添加您的服务器的IP地址到mongod.conf文件。如果你使用Linux(Ubuntu的)操作系统,你可以试试我的解决方案:
vi /etc/mongod.conf
现在,你可以尝试使用pymongo MongoClient连接的MongoDB。
已发生错误的原因是在后台没有MongoDB的服务器上运行。要运行MongoDB服务器打开CMD或蟒蛇提示符并键入如下: -
net:
port:27017
bindIp:127.0.0.1,mongodb server ip
然后运行
sudo service mongod restart
我使用pymongo 3.2和我碰到了同样的错误,但它是在我的情况下,missconfiguration。启用授权后,我忘了更新的端口在结束了在连接timout的URL。也许这是值得一提的是?因为它通常比数据库中存储应用程序数据的不同authSource可能是必需的。