2011-11-08 5 views
6

Sto usando pgbouncer con Django. Ho aggiunto il database test_foo alla sua configurazione per poter eseguire test, perché apparentemente Django non può utilizzare una porta diversa per il DB di test. Ora la prova di funzionamento, ma alla fine, quando Django cerca di far cadere il DB di prova, ricevodjango non può rilasciare il DB di test tramite pgbouncer

django.db.utils.DatabaseError: database "test_foo" is being accessed by other users 
DETAIL: There are 1 other session(s) using the database. 

Suppongo che è causato dal collegamento aperto memorizzato da pgbouncer. Cosa posso fare?

+0

Questo è un problema così frustrante. – orokusaki

risposta

6

Questa non è la soluzione perfetta, ma fa il trucco. È possibile forzare Django di utilizzare diverse impostazioni di database durante l'esecuzione di test di unità con l'aggiunta al vostro settings.py:

if 'test' in sys.argv or 'test_coverage' in sys.argv:  
    # Use 5432 as db port (avoid going through pgbouncer, can't delete test DB). 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.contrib.gis.db.backends.postgis', 
      'NAME': 'xxx', 
      'USER': 'xxx', 
      'PASSWORD': 'xxx', 
      'HOST': '', 
      'PORT': '5432' 
     }, 
    } 
+2

ottima risposta, funziona bene. Piccolo tweak: scrivi il codice in questo modo per cambiare semplicemente il numero di porta, supponendo che questo sia dopo la normale impostazione dei DATABASE: 'if 'test' in sys.argv o 'test_coverage' in sys.argv: DATABASES ['default'] [' PORT '] = 5432' – RichVel