我有1.3版本的django奇怪的緩存問題。我可能有配置錯誤的東西,但不知道是什麼。Django1.3多個gunicorn工作緩存問題
一個很好的例子是django-avatar,它使用緩存,許多人使用它。即使我沒有定義緩存後端,該頭像似乎被緩存,本身也可以,但它會在緩存的最後一個值之間來回切換。例如:我上傳了一個新的頭像,現在約有50%的請求會顯示新頭像,50%是舊頭像。如果我刪除舊的,我仍然可以在50%的時間內在網站上獲得它。修復它的唯一方法是通過將頭像設置爲一秒來禁用頭像的緩存。
首先,我認爲這是因爲我使用了django.core.cache.backends.locmem.LocMemCache,這是我以前從未使用過的,但它甚至發生在我根本不配置緩存後端時。
我發現了一個類似的錯誤: Django caching bug .. even if caching is disabled
但我的網頁渲染就好了,它引起我的Setup中的問題templatetags(現在)。
我使用Django 1.3,Postgres的,Nginx的,gunicorn 0.12.0,greenlet == 0.3.1,eventlet == 0.9.16
我只是做了一些更多的測試,並意識到它,只有當我開始發生gunicorn使用配置文件。如果我用./manage.py run_gunicorn啓動它,一切都很好。運行「gunicorn_django -c deploy/gunicorn.conf.py」會導致問題。
我能想到的唯一解釋是每個工人都有自己的緩存(我想知道爲什麼,因爲我沒有定義緩存)。
更新:運行./manage.py run_gunicorn -w 4也會導致相同的問題。因此,我幾乎可以肯定的是,多名工人正在造成問題,每名工人分別緩存價值。
我的配置:
import os
import socket
import sys
PORT = 8000
PROC_NAME = 'myapp_gunicorn'
LOGFILE_NAME = 'gunicorn.log'
TIMEOUT = 3600
IP = '127.0.0.1'
DEPLOYMENT_ROOT = os.path.dirname(os.path.abspath(__file__))
SITE_ROOT = os.path.abspath(os.path.sep.join([DEPLOYMENT_ROOT, '..']))
CPU_CORES = os.sysconf("SC_NPROCESSORS_ONLN")
sys.path.insert(0, os.path.join(SITE_ROOT, "apps"))
bind = '%s:%s' % (IP, PORT)
logfile = os.path.sep.join([DEPLOYMENT_ROOT, 'logs', LOGFILE_NAME])
proc_name = PROC_NAME
timeout = TIMEOUT
worker_class = 'eventlet'
workers = 2 * CPU_CORES + 1
我也試了一下,而無需使用 'eventlet',但得到了同樣的錯誤。
感謝您的任何幫助。
作爲緩存後端切換到memcache解決了我的問題。然而,我仍然感興趣爲什麼會發生這種情況...如果我做錯了什麼或者這是一個錯誤。 –