gunicorn + redis:不起作用?

cur*_*gie 5 django caching redis gunicorn

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

CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': '/tmp/redis.sock',
  },
}
Run Code Online (Sandbox Code Playgroud)

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

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

gunicorn myapp:wsgi_app -w 3 -b ip:8000
Run Code Online (Sandbox Code Playgroud)

由于这为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>))
Run Code Online (Sandbox Code Playgroud)

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

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

小智 0

看起来 Redis 缓存取消拾取对象时发生错误。

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

检查您是否已将webapi应用程序添加到settings.INSTALLED_APPS中。