我正在将 django 应用程序从 1.6 升级到 1.7。该应用程序使用django-cacheops
存储查询结果。切换到 Django 1.7 后,除第一个请求外,所有请求都会引发以下错误:
Traceback (most recent call last):
File "/data/virtualenv/default/lib/python2.7/site-packages/django/core/handlers/base.py", line 204, in get_response
response = middleware_method(request, response)
File "/data/virtualenv/default/lib/python2.7/site-packages/tracking/middleware.py", line 131, in process_response
visitor = self._refresh_visitor(user, request, now)
File "/data/virtualenv/default/lib/python2.7/site-packages/tracking/middleware.py", line 60, in _refresh_visitor
visitor = Visitor.objects.get(pk=session_key)
File "/data/virtualenv/default/lib/python2.7/site-packages/cacheops/query.py", line 398, in get
return self.get_queryset().inplace().get(*args, **kwargs)
File "/data/virtualenv/default/lib/python2.7/site-packages/cacheops/query.py", line 295, in get
return qs._no_monkey.get(qs, *args, **kwargs)
File "/data/virtualenv/default/lib/python2.7/site-packages/django/db/models/query.py", line 353, in get
return clone._result_cache[0]
AttributeError: 'list' object has no attribute '_result_cache'
AttributeError
引发时clone
是带有单个项目的列表,但它是该列表django.db.models.query
的属性_result_cache
。
在django-cacheops
调用该函数 self
类型的方法中是CacheQuerySet
.
我怀疑这个问题的根源是django
代码需要一个QuerySet
对象,而鸭子CacheQuerySet
与预期的不太匹配QuerySet
.
也有可能配置不正确。以下是相关设置:
CACHEOPS_REDIS = {
'host': 'localhost',
'port': 6379,
'db': 10,
'socket_timeout': 3,
}
CACHEOPS = {
'core.vantageuser': {'ops':'count', 'timeout':60*2},
'core.banditarm': {'ops':'all', 'timeout':60*2},
'core.armmembership': {'ops':'all', 'timeout':60*60*2},
}
CACHEOPS_FAKE = False
CACHEOPS_DEGRADE_ON_FAILURE = True
这是一个应该报告的真实问题django-cacheops
吗?任何人有任何想法绕过这个问题(除了设置CACHEOPS_FAKE=True
)?
[编辑]:
我的朋友能够以最低限度的 repo 复制该问题。问题似乎源于django-tracking2
包裹。
目前还没有解决方案,但正在努力。