2010-08-11 8 views
6

Después de luchar con diferentes cosas aquí y allá, finalmente pude obtener BottlePY corriendo en Apache y ejecutar un sitio con MongoDB. Estoy acostumbrado a ejecutar aplicaciones de Django, así que me relacionaré un poco con mi pregunta.¿Por qué mi conexión MongoDB remota requiere autenticación en cada consulta?

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 tiene que volver a autenticar (lo que significa que probablemente tuvo que volver a conectar).

lo que encontré

Os adjunto 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, detecta los errores OperationFailure o AutoReconnect y luego llama a la función db.authenticate(). Después de volver a autenticarlo, lo agrego a un registro de db para controlar la frecuencia con que debe volver a autenticarse. Actualmente, necesita volver a autenticarse en cada carga de página (que requiere ejecutar una consulta). Esto no es correcto

Diferencia de Django

que usan 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é crear una conexión de pymongo en django sería diferente de crear uno en botella, ya que estoy usando el mismo controlador, funciones y métodos. No estoy usando ORMS ni nada de eso tampoco.

Versiones

  • Botella: 0.9.dev
  • Django: 1.2.1 definitiva
  • PyMongo: 1,8

Agradezco la ayuda!

Actualización: Un amigo pudo echar un vistazo rápido y notó lo siguiente que puede ayudar a responder mi pregunta.

Parece que cada solicitud es el lanzamiento de un nuevo proceso de Python, como oposición a Django, en el que un solo proceso permanece funcionando durante un largo período de tiempo .

+0

Tiene que autenticarse tantas veces como sea el número de sus procesos de trabajo. No puede reutilizar conexiones de base de datos entre procesos. De modo que lo primero que debe resolver en su marco (independientemente de MongoDB) es que hay pocos procesos (en un grupo de trabajadores) en su marco que atienda sus solicitudes. os.getpid() debería devolver solo algunos valores disjuntos. – pts

+0

¿cómo ejecutas tu python dentro de apache: a través de mod_python o wsgi? –

+0

@pts ¡Gracias! Estoy investigando esto. @ ralf.w. WSGI en Apache2 –

Respuesta

1

Esto sólo terminó siendo una cosa extraña entre la botella y MongoHQ.No se encontró una solución real, pero no pude volver a crearla con otros marcos. Cualquier otra idea es apreciada.

0

¿Su Apache xxx.conf contiene algo como:

WSGIDaemonProcess project user=mysite group=www-data processes=5 threads=1 WSGIProcessGroup project

creo más importante debe ser threads=1

+0

Se estableció en 10 pero lo cambié a 1 y no se ha resuelto el problema. Buen punto, gracias! –

+0

También intente establecer ambos procesos = 1 y threads = 1 y vea si el problema desaparece. Tenga en cuenta que esto debería ser solo una configuración temporal para la depuración, ya que limita el número de conexiones simultáneas que puede manejar su aplicación web. – pts

+0

Ambas variables ya estaban configuradas en 1. –

Cuestiones relacionadas