gpt4 book ai didi

python - Django 1.7.4 和 django-cacheops 2.2.1 之间可能存在的交互问题

转载 作者:太空宇宙 更新时间:2023-11-04 05:54:56 34 4
gpt4 key购买 nike

我正在将 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 the attribute _result_cache to be that list .

django-cacheops method that calls that function 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)吗?

[编辑]:

My friend was able to replicate the issue with a bare minimum repo .这个问题似乎源于 django-tracking2 包。

还没有解决方案,但正在努力。

最佳答案

您的配置中确实存在错误 'ops':'count' 应该拼写为 'ops':['count'](人们会这样做无论如何,所以下一个版本的 cacheops 会理解这一点)。但是,这不应导致您收到错误。

除了 cacheops 与 QuerySet 混淆之外,您的问题很可能来自另一个包。所以检查是否有任何猴子补丁或子类化它。如果 __getitem__() 被篡改,请特别注意。

如果您无法确定这是从哪里来的,我建议您对您的项目进行“狗屎到甜蜜”的拆解:删除第三方应用程序和您的代码,直到一切开始正常工作,然后在最后一步注意。如果它仍然无法正常工作,那么您可以在 github 上创建一个问题并将您的项目剩下的内容附加到那里。

关于python - Django 1.7.4 和 django-cacheops 2.2.1 之间可能存在的交互问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28305802/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com