¿Por qué mi conexión MongoDB remota requiere autenticación en cada consulta?
Pregunta
Después de luchar con cosas diferentes aquí y allá, que finalmente fue capaz de conseguir BottlePY se ejecuta en Apache y correr MongoDB un sitio en polvo. Estoy acostumbrado a la ejecución de aplicaciones de Django, así que voy a estar relacionados con ese un poco en mi pregunta.
El problema
Cada vez que una página se carga a través BottlePY, la conexión a la base de datos MongoDB situado en MongoHQ.com necesita ser re-autenticado (lo que significa que probablemente tuvo que volver a conectar).
lo que encontré
Me une una función db.keep_alive()
a la parte superior de cada función del modelo, por lo que antes de ejecutar cualquier consulta mongodb, trys para ejecutar una consulta simple. Si falla, se llama la OperationFailure o errores autoReconnect y luego llama a la función db.authenticate()
. Después se vuelve a autenticar, tengo que añadir un registro a una db registros para controlar la frecuencia con que debe volver a autenticar. Actualmente, es necesario volver a autenticarse en cada carga de página (que requiere ejecutar una consulta). Esto no es correcto.
Diferencia de Django
Yo uso este mismo concepto en Django, y han encontrado que la conexión db sólo necesita ser autenticado después de 10-15 minutos de consultas no se está ejecutando.
No entiendo por qué la creación de una conexión pymongo en Django sería diferente de la creación de uno de cada botella, ya que yo estoy usando el mismo controlador, funciones y métodos. No estoy usando cualquier ORMS ni nada de eso tampoco.
Versiones
- Botella: 0.9.dev
- Django: 1.2.1 final
- PyMongo: 1.8
Agradezco la ayuda!
Actualización: Un amigo fue capaz de echar un vistazo rápido y se dio cuenta de que la siguiente ayuda de mayo con la respuesta a mi pregunta.
Parece que cada solicitud es el lanzamiento de un nuevo proceso de Python, como oposición a Django, en el que un único restos proceso que se ejecuta durante mucho período de tiempo.
Solución
Esto sólo terminó siendo una cosa extraña entre la botella y MongoHQ. No se ha encontrado solución real, pero no podía volver a crearlo con otros marcos. Cualquier otra idea se aprecian.
Otros consejos
¿su apache xxx.conf contiene algo como:
WSGIDaemonProcess project user=mysite group=www-data processes=5 threads=1
WSGIProcessGroup project
Creo que más importante debe ser threads=1