我已经解决了一会儿。我建立了一个全新的机器。我已经安装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 - 随机提高OperationalError

我想答案是一样的双方,如果当有人终于想通了。同样的问题一直困扰着我约一个月,现在我不知道这可能是导致它。

其他提示

fork()子进程(使用preforked FastCGI的或类似的东西)?这可能是成立于父进程的连接不孩子一起的原因。如果您使用preforked方法可以很容易地切换到线程,看问题是否已经消失。我在这样的情况下看到完全相同的浮动错误。

尽管这是很老的问题, 最好的解决方案,我发现是在这个答案。 只是执行以下操作:

from django import db

和主叫叉或使用多处理执行之前:

db.connections.close_all()

在我的情况下,我的WSGI服务器,uWSGI,被分叉我的应用程序处理,使得底层连接池共享。这是导致未定义行为(非确定性)被发送的连接下来,OP锯。

我建议确保您的应用程序都热切分叉。在uWSGI你做随选

lazy-apps = true

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top