Domanda

Voglio usare uno SQLite in memoria ( ": la memoria:") DB per le prove della mia webapp. Sto utilizzando nosetests per i test, e webpy come quadro.

Voglio popolare il DB nella funzione setup (), e quindi eseguire tutti i miei test. Il mio problema è che webpy chiude tutte le connessioni DB aperti dopo ogni richiesta, e lo SQLite: la memoria:. DB dura solo fino a quando si chiude la connessione, in modo che solo il primo test è in realtà esegue correttamente e tutti gli altri non riescono

Le mie scelte sono o per eseguire i test su un disco sostenuto DB, o per ricreare l'intero DB in memoria all'inizio di ogni singola prova.

Sapete come posso impedire che webpy dalla chiusura delle connessioni DB dopo ogni richiesta? Riuscite a pensare a un altro modo per ottenere un in memoria SQLite DB che dura per più di una richiesta utilizzando webpy?

È stato utile?

Soluzione

Forse si potrebbe eseguire i test su un DB memorizzati sul disco, ma utilizzando un . In Windows, è possibile installare un driver di creare un disco RAM ( alcune istruzioni qui ). In Linux, credo che si desidera impostare tmpfs .

Un disco RAM agirà esattamente come un hard disk, ma funzionerà completamente a memoria, in modo che si perde un po 'del sovraccarico di caricamento dei file da / per il disco fisso.

Altri suggerimenti

Non testato:

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

Si noti che questo può funzionare solo se si esegue web.py in un modo che utilizza processo di sistema operativo una sola. Se una richiesta viene inviato attraverso più processi, ognuno sarà ancora ottenere il proprio database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top