gunicorn + redis:不起作用?

时间:2014-03-06 09:07:07

标签: django caching redis gunicorn

我使用redis [内存缓存来过滤重复记录]运行一个Django服务器,集成到芹菜进程[将数据异步插入PostgreSQL数据库的任务]。 django服务器通过django-redis-cache与redis集成,并启用了缓存。

CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': '/tmp/redis.sock',
  },
}

如果我使用./manage.py runserver ip:8000来运行我的服务器并开始发布数据,那么在redis中的GET / SET属性期间没有问题,因为它是一个应用程序,我的应用程序运行顺畅。

但是现在,我打算通过这个命令将django迁移到gunicorn

gunicorn myapp:wsgi_app -w 3 -b ip:8000

由于这为django进程创建了3个worker,我相信他们正在尝试访问相同的redis-server进行缓存。

如果我使用此设置开始发布数据,我会收到此消息,

Internal Server Error: /post/data/
 File "/path/to/app/views.py", line 94, in saveData
   value = cache.get(key)
 File "/usr/local/lib/python2.7/dist-packages/redis_cache/cache.py", line 186, in get
   result = self.unpickle(value)
 File "/usr/local/lib/python2.7/dist-packages/redis_cache/cache.py", line 248, in unpickle
   return pickle.loads(value)
 File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 1035, in model_unpickle
   return cls.__new__(cls)
 TypeError: ('object.__new__(X): X is not a type object (NoneType)', <function model_unpickle at 0x1c49aa0>, ((u'webapi', 'Reading'), [], <function simple_class_factory at 0x1c49a28>))

如果我检查redis-server日志[redis-cli monitor],在我开始使用gunicorn之后,我会在其中获得空记录。

是否还有一个聪明的工作来保持redis活跃为gunicorn线程?

1 个答案:

答案 0 :(得分:0)

当Redis Cache解开对象时,似乎发生了错误。

原因是Django无法找到模型(u'webapi', 'Reading')

检查是否已将webapi应用添加到设置中。INSTALLED_APPS。