Pregunta

Quiero usar una SQLite en la memoria ( ": la memoria:") DB para las pruebas en mi aplicación web. Estoy usando nosetests para las pruebas, y webpy como marco.

Quiero poblar la base de datos en la función setup (), y luego ejecutar todas mis pruebas. Mi problema es que webpy cierra todas las conexiones de base de datos abiertos después de cada solicitud, y el SQLite: la memoria:. DB sólo dura hasta que se cierra la conexión, por lo que sólo la primera prueba es en realidad ejecuta correctamente y todos los otros fallan

Mis opciones son o bien para ejecutar las pruebas sobre un disco de respaldo DB, o para recrear toda la base de datos en memoria al comienzo de cada prueba individual.

¿Sabe usted cómo puedo evitar que se cierre webpy conexiones de base de datos después de cada petición? ¿Puede pensar en cualquier otra forma de obtener una base de datos SQLite en la memoria que tiene una duración de más de una solicitud utilizando webpy?

¿Fue útil?

Solución

Tal vez usted podría ejecutar las pruebas en una base de datos almacenados en el disco, pero utilizando un disco RAM . En Windows, se puede instalar un controlador para configurar un disco RAM ( algunas instrucciones aquí ). En Linux, creo que usted desea configurar tmpfs .

Un disco RAM actuará exactamente como un disco duro, pero funcionará por completo de la memoria, por lo que va a perder algunos de los gastos indirectos de la carga de archivos a / desde el disco duro.

Otros consejos

No comprobado:

class NoCloseDB(web.db.SqliteDB):
  def _unload_context(self):
    pass # this keeps the _ctx.db attribute alive
web.db.register_database('sqlite',NoCloseDB) # overrides the previous registration

Tenga en cuenta que esto sólo puede funcionar si se ejecuta web.py de una manera que utiliza el proceso del sistema operativo único. Si la solicitud se envía a través de múltiples procesos, cada uno de ellos todavía tendrá su propia base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top