2009-10-15 40 views
8

Tôi đã giải quyết vấn đề này một thời gian. Tôi thiết lập một cỗ máy hoàn toàn mới. Tôi đã cài đặt một bản sao mới của postgresql và tất cả các phụ thuộc khác của tôi. Về cơ bản, tôi nhận được những ngắt kết nối cơ sở dữ liệu vào những thời điểm ngẫu nhiên. Tôi có thể thực hiện các yêu cầu giống nhau và nó hoạt động hoặc không. Rất không xác định trong ngoại hình. Xem nhật ký tại Postgresql, nó thậm chí không có kết nối. Bây giờ, tôi hy vọng rằng nếu nó không bao giờ kết nối tôi sẽ nhận được vấn đề này khi thiết lập kết nối và nhận con trỏ, nhưng tôi nhận được nó khi cố gắng để thực sự sử dụng kết nối sau này. Với traceback dưới đây, tôi hy vọng sẽ thấy một kết nối được thực hiện trong các bản ghi pg, và sau đó bị ngắt kết nối vì lý do nào đó sau này. Tôi không, vì vậy tôi tự hỏi nếu có một số đầu mối trong đó không phù hợp.psycopg2 ngắt kết nối khỏi máy chủ

Traceback (most recent call last): 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/core/handlers/wsgi.py", line 242, in __call__ 
    response = self.get_response(request) 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/core/handlers/base.py", line 73, in get_response 
    response = middleware_method(request) 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/middleware/locale.py", line 16, in process_request 
    language = translation.get_language_from_request(request) 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/utils/translation/__init__.py", line 97, in get_language_from_request 
    return real_get_language_from_request(request) 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/utils/translation/trans_real.py", line 349, in get_language_from_request 
    lang_code = request.session.get('django_language', None) 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/contrib/sessions/backends/base.py", line 63, in get 
    return self._session.get(key, default) 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/contrib/sessions/backends/base.py", line 172, in _get_session 
    self._session_cache = self.load() 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/contrib/sessions/backends/db.py", line 16, in load 
    expire_date__gt=datetime.datetime.now() 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/db/models/manager.py", line 120, in get 
    return self.get_query_set().get(*args, **kwargs) 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/db/models/query.py", line 300, in get 
    num = len(clone) 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/db/models/query.py", line 81, in __len__ 
    self._result_cache = list(self.iterator()) 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/db/models/query.py", line 238, in iterator 
    for row in self.query.results_iter(): 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/db/models/sql/query.py", line 287, in results_iter 
    for rows in self.execute_sql(MULTI): 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/db/models/sql/query.py", line 2369, in execute_sql 
    cursor.execute(sql, params) 
    File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/db/backends/util.py", line 19, in execute 
    return self.cursor.execute(sql, params) 
OperationalError: server closed the connection unexpectedly 
     This probably means the server terminated abnormally 
     before or while processing the request. 
+0

Tôi nghĩ rằng một giải pháp một phần cho các vấn đề của bạn có thể được tìm thấy ở đây: http://stackoverflow.com/a/33128806/2144966 – Kalle

Trả lời

4

Đây là một câu hỏi rất giống với một đăng ở đây:

Django + FastCGI - randomly raising OperationalError

Tôi tưởng tượng ra câu trả lời sẽ giống nhau cho cả hai nếu và khi một ai đó cuối cùng figured it out. Vấn đề tương tự này đã làm phiền tôi khoảng một tháng nay và tôi không biết có thể gây ra chuyện gì.

+0

Cuối cùng đã chỉ ra rằng trước đó ngày hôm nay và đã có kế hoạch liên kết với nó bản thân mình từ đây. Đây là một vấn đề thực sự, và rõ ràng là rất nhiều người trong chúng ta đã gặp phải vấn đề này, nhưng có thể rất khó để lấy bằng chứng và tìm kiếm thông tin. Cảm ơn vì tiền hỗ trợ. – ironfroggy

2

Bạn có fork() quy trình con (dùng preforked FastCGI hoặc tương tự) không? Đây có thể là lý do kết nối được thiết lập trong quá trình cha mẹ không hoạt động ở trẻ em. Nếu bạn sử dụng phương pháp preforked thật dễ dàng để chuyển sang luồng để xem liệu sự cố đã biến mất chưa. Tôi thấy chính xác lỗi nổi cùng trong trường hợp như vậy.

+0

Trong khi tôi đang sử dụng một backend fastcgi preforked, kết nối được thiết lập theo yêu cầu, trong các tiến trình con. Ngoài ra, nếu một cái gì đó như thế này là trường hợp tôi sẽ mong đợi vấn đề có thể dự đoán được hơn, trong khi thực tế các yêu cầu thường thành công và thất bại là bên ngoài không xác định. – ironfroggy

+0

Khi lỗi con kế thừa bộ mô tả ổ cắm và gửi dữ liệu đến bất kỳ đứa trẻ nào (điều này hoặc khác) có thể nhận được phản hồi. Điều đó gây ra lỗi để được thả nổi. Tôi đề nghị thêm đăng nhập để đảm bảo kết nối được khởi tạo sau khi ngã ba. Do sử dụng rộng rãi các biến toàn cầu trong việc thiết lập kết nối django sớm có thể được ẩn khỏi mắt bạn. Lưu ý, toàn bộ mã đó được nhập trước ngã ba. –

+0

Tôi đã đăng nhập để xác định điều này. Kết nối chỉ được thực hiện tại thời điểm yêu cầu, ở trẻ em, để đáp ứng với tín hiệu yêu cầu khởi động. Các tiến trình con đã được thiết lập trước khi được gửi yêu cầu đó để kích hoạt kết nối. – ironfroggy

2

Mặc dù câu hỏi rất cũ, Giải pháp tốt nhất mà tôi đã tìm thấy là trong câu trả lời this. chỉ làm như sau:

from django import db 

và trước khi gọi ngã ba hoặc sử dụng đa xử lý thực hiện:

db.connections.close_all() 
Các vấn đề liên quan