2013-02-20 39 views
0

我有一個與Gunicorn和nginx一起部署的Django項目。我也有一個memcached運行,Django緩存中間件()設置爲緩存該網站。用DEBUG =真正運行的時候Django的緩存中間件不工作在Gunicorn,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中間件跆拳道。?)

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) 

任何線索,爲什麼發生這種情況?

由於提前, 安東

回答

1

這是我中間件的訂貨!

這是排序我有,這是錯誤

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' 
) 

也許這將幫助別人的未來...