1

Gunicornとnginxを使用してDjangoプロジェクトをデプロイしています。また、memcachedを実行しており、サイトをキャッシュするようにDjangoキャッシュミドルウェア()を設定しています。

DEBUG = Trueで実行するとすべて正常に動作しますが、DEBUG = Falseに切り替えると、サイトにアクセスしようとするとGunicornログに次のエラーが表示されます。

2013-02-20 16:09:50 [25196] [ERROR] Error handling request
Traceback (most recent call last):
  File "/home/toursprung/.virtualenvs/myproject/lib/python2.6/site-packages/gunicorn/workers/sync.py", line 102, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/home/toursprung/.virtualenvs/myproject/lib/python2.6/site-packages/django/contrib/staticfiles/handlers.py", line 67, in __call__
    return self.application(environ, start_response)
  File "/home/toursprung/.virtualenvs/myproject/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 247, in __call__
    status_text = STATUS_CODE_TEXT[response.status_code]
AttributeError: 'NoneType' object has no attribute 'status_code'

奇妙なことに、Djangoから送信されたエラーメールで別のエラーが発生します。ここで次のようになります:(GZIPミドルウェアのエラー。wtf?)

Traceback (most recent call last):

  File "/home/toursprung/.virtualenvs/myproject/lib/python2.6/site-packages/django/core/handlers/base.py", line 188, in get_response
    response = middleware_method(request, response)
  File "/home/toursprung/.virtualenvs/myproject/lib/python2.6/site-packages/django/middleware/gzip.py", line 16, in process_response
    if len(response.content) < 200:
  File "/home/toursprung/.virtualenvs/myproject/lib/python2.6/site-packages/django/http/__init__.py", line 699, in _get_content
    return ''.join([str(e) for e in self._container])

UnicodeEncodeError: 'ascii' codec can't encode character u'\x8b' in position 26: ordinal not in range(128)

なぜこれが起こっているのか手がかりはありますか?

よろしくお願いします、アントン

4

1 に答える 1

2

ミドルウェアの注文でした!

これは私が持っていた順序ですが、間違っています

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    'myproject.middleware.StripCookieMiddleware', # fix caching problem with analytics cookies
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.gzip.GZipMiddleware',
    ...
    'django.middleware.cache.FetchFromCacheMiddleware'
)

私はGZipMiddleware真下に移動しましたUpdateCacheMiddleware(わかりました、間にグーグルアナリティクスCookieを取り除く私の小さなミドルウェアがあります)そして今、すべてが期待通りに機能しています。

したがって、これはミドルウェアの正しい順序です。

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    'myproject.middleware.StripCookieMiddleware', # fix caching problem with analytics cookies
    'django.middleware.gzip.GZipMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    ...
    'django.middleware.cache.FetchFromCacheMiddleware'
)

多分これは将来誰かを助けるでしょう...

于 2013-02-21T08:53:46.197 に答える