1

我遇到了一些奇怪的问题。当我为我的 django 应用程序运行单个工作人员时?像这样:

python manage.py run_gunicorn -w 1
python manage.py runserver

所有请求都正确服务,但如果启动多个工作人员,例如:

python manage.py run_gunicorn -w 10

Django 对我(大约)一半的请求做出错误响应:

2013-06-13 18:02:39 [10205] [ERROR] Error handling request
Traceback (most recent call last):
  File "/home/mezhenin/venv/karma/local/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 130, in handle_request
    for item in respiter:
  File "/home/mezhenin/venv/karma/local/lib/python2.7/site-packages/raven/middleware.py", line 27, in __call__
    iterable = self.application(environ, start_response)
  File "/home/mezhenin/venv/karma/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 255, in __call__
    response = self.get_response(request)
  File "/home/mezhenin/venv/karma/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 177, in get_response
    signals.got_request_exception.send(sender=self.__class__, request=request)
  File "/home/mezhenin/venv/karma/local/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 170, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/home/mezhenin/venv/karma/local/lib/python2.7/site-packages/django/db/__init__.py", line 68, in _rollback_on_exception
    transaction.rollback_unless_managed(using=conn)
  File "/home/mezhenin/venv/karma/local/lib/python2.7/site-packages/django/db/transaction.py", line 143, in rollback_unless_managed
    connection.rollback_unless_managed()
  File "/home/mezhenin/venv/karma/local/lib/python2.7/site-packages/django/db/backends/__init__.py", line 232, in rollback_unless_managed
    self._rollback()
  File "/home/mezhenin/venv/karma/local/lib/python2.7/site-packages/django/db/backends/__init__.py", line 59, in _rollback
    return self.connection.rollback()
OperationalError: no connection to the server

我尝试将 sqlite3 作为 Django 的数据库后端,它工作正常。有人对 psycopg2 有同样的问题吗?

Django==1.5
gunicorn==0.17.2
psycopg2==2.5
4

1 回答 1

0

对不起打扰。问题不在 psycopg/Django/gunicorn 中。我使用鼻子进行测试:

==== settings.py ====
INSTALLED_APPS = INSTALLED_APPS + ('django_nose',)
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
NOSE_ARGS = ['--with-doctest']

删除此行后,随机错误消失。

于 2013-06-13T15:18:32.273 回答