2011-11-08 11 views
6

Estoy usando pgbouncer con Django. He agregado la base de datos test_foo a su configuración para poder ejecutar pruebas, porque aparentemente Django no puede usar un puerto diferente para la base de datos de prueba. Ahora la prueba de funcionamiento, pero al final, cuando Django intenta soltar la base de datos de prueba, recibodjango no puede soltar el DB de prueba a través de pgbouncer

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

supongo que es causada por la conexión abierta almacenada por pgbouncer. ¿Que puedo hacer?

+0

Esto es un problema tan frustrante. – orokusaki

Respuesta

6

Esta no es la solución perfecta, pero cumple su cometido. Puede forzar a Django a usar diferentes configuraciones de base de datos cuando ejecuta pruebas unitarias al agregar a su configuración.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

excelente respuesta, funciona bien. Pequeño ajuste: escriba el código de esta manera para cambiar el número de puerto, suponiendo que esto es después de su configuración normal de BASES DE DATOS: 'si 'prueba' en sys.argv o 'test_coverage' en sys.argv: BASES DE DATOS ['default'] [' PORT '] = 5432' – RichVel

Cuestiones relacionadas