سؤال

لقد كنت أتناول هذا لفترة من الوقت. أقوم بإعداد آلة جديدة تمامًا. لقد قمت بتثبيت نسخة جديدة من PostgreSQL وجميع تبعاتي الأخرى. في الأساس ، أحصل على قطع اتصال قاعدة البيانات هذه في أوقات عشوائية. يمكنني إجراء طلبات متطابقة وإما أنها تعمل أو لا. غير محدد جدا في المظهر الخارجي. مشاهدة السجلات في postgreSQL ، لا تحصل حتى على اتصال. الآن ، أتوقع أنه إذا لم يتم توصيله أبدًا ، فسوف أحصل على هذه المشكلة عند إنشاء الاتصال والحصول على المؤشر ، لكنني أحصل عليه عند محاولة استخدام الاتصال لاحقًا. بالنظر إلى التتبع أدناه ، أتوقع أن أرى اتصالًا تم إجراؤه في سجلات PG ، ثم تم فصله لسبب ما لاحقًا. أنا لا ، لذلك أتساءل عما إذا كان هناك بعض الدلائل في هذا عدم التوافق.

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.
هل كانت مفيدة؟

المحلول

هذا سؤال مشابه جدًا لتلك المنشورة هنا:

Django + fastcgi - رفع بشكل عشوائي التشغيل

أتصور أن الإجابة ستكون هي نفسها بالنسبة لكليهما إذا كان شخص ما قد اكتشفها في النهاية. كانت هذه المشكلة نفسها تزعجني لمدة شهر تقريبًا وليس لدي أي فكرة عما يمكن أن يسبب ذلك.

نصائح أخرى

هل أنت fork() عمليات الطفل (استخدم fastcgi المسبق أو شيء مشابه)؟ قد يكون هذا هو السبب في أن العلاقة التي تم تأسيسها في عملية الوالدين لا تعمل في الطفل. إذا كنت تستخدم الطريقة المسبقة ، فمن السهل التبديل إلى الخيوط لمعرفة ما إذا كانت المشكلة قد انتهت أم لا. رأيت بالضبط نفس الخطأ العائم في مثل هذه الحالة.

على الرغم من أنه سؤال قديم للغاية ، إلا أن أفضل حل وجدته هو هذه إجابه. فقط افعل ما يلي:

from django import db

وقبل استدعاء الشوكة أو استخدام المعالجة المتعددة التنفيذ:

db.connections.close_all()

في حالتي ، كان خادم WSGI الخاص بي ، UWSGI ، يمنح عمليات تطبيقي بحيث تمت مشاركة تجمع الاتصال الأساسي. كان هذا يسبب سلوكًا غير محدد (غير محدد) كان يرسل اتصالات لأسفل كما المنشار OP.

أوصي بتأكد من أن عمليات التطبيق الخاصة بك متشوهين بفارغ الصبر. في UWSGI تفعل ذلك مع الخيار

lazy-apps = true

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top