2011-11-08 19 views
6

Tôi đang sử dụng pgbouncer với Django. Tôi đã thêm test_foo cơ sở dữ liệu vào cấu hình của nó để có thể chạy thử nghiệm, bởi vì dường như Django không thể sử dụng cổng khác cho DB thử nghiệm. Bây giờ chạy thử nhưng cuối cùng, khi Django cố gắng để giảm DB thử nghiệm, tôi nhận đượcdjango không thể bỏ DB thử nghiệm qua pgbouncer

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

Tôi cho rằng đó là do kết nối mở được lưu trữ bởi người tìm kiếm. Tôi có thể làm gì?

+0

Đây là một vấn đề khó chịu. – orokusaki

Trả lời

6

Đây không phải là giải pháp hoàn hảo, nhưng nó thực hiện thủ thuật. Bạn có thể buộc Django sử dụng các cài đặt cơ sở dữ liệu khác nhau khi chạy thử nghiệm đơn vị bằng cách thêm vào settings.py của bạn:

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

câu trả lời tuyệt vời, hoạt động tốt. Tinh chỉnh nhỏ: viết mã như thế này để chỉ thay đổi số cổng, giả sử đây là sau khi cài đặt DATABASES bình thường của bạn: 'if 'test' trong sys.argv hoặc 'test_coverage' trong sys.argv: DATABASES ['default'] [' PORT '] = 5432' – RichVel

Các vấn đề liên quan