Pourquoi est-PyMongo 3 donner ServerSelectionTimeoutError?
Je suis en utilisant:
- Python 3.4.2
- PyMongo 3.0.2
- mongolab de course mongod 2.6.9
- uWSGI 2.0.10
- CherryPy 3.7.0
- nginx 1.6.2
uWSGI commencer params:
--socket 127.0.0.1:8081 --daemonize --enable-threads --threads 2 --processes 2
- Je configurer mon MongoClient UNE seule fois:
self.mongo_client = MongoClient('mongodb://user:[email protected]:port/mydb')
self.db = self.mongo_client['mydb']
J'essaie de l'enregistrer au format JSON dict pour MongoDB:
result = self.db.jobs.insert_one(job_dict)
Qu'il fonctionne via un test de l'unité qui exécute le même chemin d'accès du code de mongodb. Cependant, lorsque j'execute via CherryPy et uWSGI en utilisant un HTTP POST, j'obtiens ceci:
pymongo.errors.ServerSelectionTimeoutError: No servers found yet
Pourquoi suis-je en voyant ce comportement lorsqu'il est exécuté par CherryPy et uWSGI? Est-ce peut-être le nouveau modèle de thread dans PyMongo 3?
Mise à jour:
Si j'exécute sans uWSGI et nginx par l'aide de la CherryPy serveur intégré, le insert_one()
œuvres.
Mise à jour 1/25 4:53pm EST:
Après l'ajout de certains de débogage dans PyMongo, il semble que topology._update_servers()
sait que le type_serveur = 2 pour le serveur "myserver-a.mongolab.com'. Cependant server_description.known_servers()
a la type_serveur = 0 pour le serveur "myserver.mongolab.com'
Ce qui conduit à la suite de la trace de pile:
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
- J'appuie trop sur ce type d'installation. Avez-vous jamais trouver une réponse?
- Rien encore ... n'ai pas encore eu de retour pour le débogage.
- Souhaitez-moi de commencer un bounty? Seriez-vous disponible pour répondre à des questions de suivi? Je suis complètement coincé sur moi-même.
- Est-ce utile? blog.fejes.ca/?p=2496 je ne suis pas sûr de savoir comment elle s'appliquerait à uwsgi?
- Bounty serait génial. J'ai essayé de poster dans la mongodb groupe google mais ma question ne l'ai jamais posté.
- Ok, bounty a commencé.
- Je vois votre commentaire a été posté sur le Groupe Google, @drfence, et PyMongo le responsable de Bernie Hackett est essayer de diagnostiquer là: groups.google.com/forum/#!topic/mongodb/utilisateur 7qX03P3_zKM
- En général, si vous voyez ce qui ressemble à un PyMongo bug, le moyen le plus direct pour communiquer avec moi, Bernie, Anna, et de Luc, est de déposer un ticket dans le projet de PYTHON à jira.mongodb.org. Nous essayons de répondre immédiatement.
- Merci Jesse, je suppose qu'on ne pouvait pas dire si c'était un problème d'utilisation ou un bug.
- J'ai eu le même problème, mais le problème est la connexion à l'ORM niveau avec
mongoengine
Vous devez vous connecter pour publier un commentaire.
Nous nous intéressons à ce problème, suivis dans PYTHON-961. Vous pouvez peut-être contourner le problème en passant connect=False lors de la création d'instances de MongoClient. Qui diffère de fond de la connexion jusqu'à la première base de données de l'opération est tentée, en évitant ce que je soupçonne est une condition de concurrence entre le spin de MongoClient moniteur du thread et multi process de bifurquer.
Je fixe moi-même par la dégradation de pymongo 3.0 2.8. Aucune idée de ce qui se passe.
pip install pymongo==2.8 --upgrade
pymogo==3.7.2
et je l'ai désinstaller et installépymongo==2.8
. Mais il ne fonctionne pas pour moi.J'ai eu le même problème avec Pymongo 3.5
S'avère en remplaçant localhost par 127.0.0.1 ou l'adresse ip correspondante de votre mongodb instance résout le problème.
Je ne suis pas sûr si vous êtes en utilisant MongoDB jumelé avec AWS service de Cloud. Mais si vous l'êtes, j'ai trouvé que vous devez spécifier l'Adresse IP que vous souhaitez MongoDB avoir accès.
Donc ce que vous devez faire est d'ajouter l'Adresse IP de votre serveur hôte pour permettre l'entrée.
Dans MongoAtlas, ce qui peut être fait à partir de cette page
Je sais qu'il y a déjà une solution au même problème, mais je n'ai pas trouvé une solution qui a aidé ma situation, donc je voulais poster ce, de sorte que d'autres puissent en bénéficier si jamais ils font face au même problème que moi.
J'ai trouvé le même problème et j'ai enfin trouvé que l'IP du client est bloqué par le pare-feu de la mongo serveur.
J'ai rencontré ce trop.
Cela pourrait être dû à pymongo3 n'est pas sûr fourche.
- Je résoudre ce problème en ajoutant
--lazy-apps
param de uwsgi, ce qui peut éviter la fourchette "safe" problème.voir uwsgi doc preforking-vs-paresseux-apps-vs-paresseux.
Avis, aucune de ces deux positives de connexion.
D'abord configurer la MongoDB environnement.
L'exécuter sur CMD - "C:\Program Files\MongoDB\Server\3.6\bin\mongod.exe"
Et puis vous pouvez utiliser pymongo [anaconda invite]
Consultez - https://docs.mongodb.com/tutorials/install-mongodb-on-windows/
peut-être vous pouvez essayer d'ajouter l'adresse ip du serveur dans le mongod.fichier conf.
si vous utilisez linux(ubuntu) os,vous pouvez essayer ma solution:
modifier mongod.fichier conf:
et vous pouvez ajouter mongodb adresse ip du serveur derrière 127.0.0.1,et enregistrer:
dans le teminal:
sudo service mongod restart
Maintenant,vous pouvez essayer de vous connecter mongodb en utilisant pymongo MongoClient.
Que l'erreur a eu lieu parce que il n'y a pas de serveur MongoDB en arrière-plan. Pour exécuter le serveur MongoDB ouvrir cmd ou anaconda d'invite de commandes et tapez ceci:-
puis exécutez
Je suis en utilisant pymongo 3.2 et je tombe sur la même erreur, mais il était un missconfiguration dans mon cas. Après l'activation de l'autorisation, j'ai oublié de mettre à jour le port dans l'url qui s'est retrouvé dans une connexion timout. Probablement, il est intéressant de mentionner que ?authSource pourrait être nécessaire car il est en général différente de la base de données stockant les données de l'application.
J'ai résolu ce problème en installant dnspython (pip install dnspython). Le problème est que: "La "dnspython" module doit être installé pour utiliser mongodb+srv://Uri"
Cela a été corrigé dans
PyMongo
avec cette pull_request.2.6.2
à3.2.2
et j'obtiens cette erreur:ServerSelectionTimeoutError: No servers found yet
. MongoDB en cours d'exécution3.2.5
, Python2.7
, Bouteille0.12.9
sur Ubuntu16.04
. La correction est-elle dans une version autre que3.2.2
?Si cela peut aider, j'ai résolu en remplacer :
par :