Pourquoi ma connexion MongoDB à distance requièrent une authentification à chaque requête?
Question
Après avoir combattu avec différentes choses ici et là, j'ai finalement en mesure d'obtenir BottlePY en cours d'exécution sur Apache et exécutez un site alimenté MongoDB. Je suis habitué à courir des applications Django, donc je vais relatif à cet un peu à ma question.
Le problème
Chaque fois qu'une page est chargée via BottlePY, la connexion à la base de données MongoDB situé sur MongoHQ.com doit être ré-authentifié (ce qui signifie qu'il a probablement de reprendre contact).
Ce que je trouve
I attaché une fonction de db.keep_alive()
au début de chaque fonction de modèle, de sorte que, avant toute requête mongodb est exécuté, il essaye d'exécuter une requête simple. Si elle échoue, elle attrape le OperationFailure ou les erreurs autoreconnect puis appelle la fonction db.authenticate()
. Après avoir authentifie à nouveau, je l'ai ajouter un journal à un db journaux pour surveiller la fréquence dont il a besoin reauthenticate. À l'heure actuelle, il doit réauthentifier sur chaque chargement de page (qui nécessite l'exécution d'une requête). Ce ne va pas.
Différence par rapport à Django
J'utilise ce même concept dans django, et nous avons trouvé que la connexion db ne doit être authentifié après 10-15 minutes de aucune requête en cours d'exécution.
Je ne comprends pas pourquoi la création d'une connexion pymongo dans django serait différent de créer une en bouteille, car je suis avec le même pilote, les fonctions et méthodes. Je n'utilise des ORMES ou quelque chose comme ça non plus.
Versions
- Bouteille: 0.9.dev
- Django: 1.2.1 finale
- PyMongo: 1.8
Je vous remercie de l'aide!
Mise à jour: Un ami a pu jeter un oeil rapide et remarqué les éléments suivants qui aident mai à répondre à ma question.
Il semble que chaque demande est le lancement d'un nouveau processus Python, comme opposition à Django, dans lequel un seul processus reste en cours d'exécution pendant une longue période de temps.
La solution
vient de se terminer pour être une chose bizarre entre la bouteille et MongoHQ. Aucune solution réelle n'a été trouvée, mais je ne pouvais pas le recréer avec d'autres cadres. D'autres idées sont appréciées.
Autres conseils
que votre apache xxx.conf contient quelque chose comme:
WSGIDaemonProcess project user=mysite group=www-data processes=5 threads=1
WSGIProcessGroup project
Je pense que le plus important devrait être threads=1