Celery配置包括对CELERY_RESULT_BACKEND
的memcached的支持。 the documentation的示例是:
CELERY_RESULT_BACKEND = 'cache+memcached://127.0.0.1:11211/'
我目前正在尝试将芹菜配置为使用我的MemCachier缓存进行memcahed,所以我将其配置为:
CELERY_RESULT_BACKEND = 'cache+memcached://mc5.dev.ec2.memcachier.com:11211'
其中mc5.dev.ec2.memcachier.com:11211
是我的缓存的url:端口。
问题是,现在当芹菜尝试使用缓存存储结果时,我收到invalid username or password
错误:
12:04:29 worker.1 | ClientError: error 9 from memcached_set: (0x2f2a520) invalid username or password, host: mc5.dev.ec2.memcachier.com:11211
我无法找到芹菜后端配置的任何示例,其中包含memcached的用户名和密码,但我尝试将其格式化为:
CELERY_RESULT_BACKEND = 'cache+memcached://<user>:<password>@mc5.dev.ec2.memcachier.com:11211'
并最终导致此错误:
ValueError: invalid literal for int() with base 10: '<password>@mc5.dev.ec2.memcachier.com'
这似乎表明该网址未被正确解析。有没有人知道配置芹菜使用MemCachier和用户名和密码的正确方法?
答案 0 :(得分:0)
首先,芹菜缓存后端将与pylibmc
或memcache
模块一起使用,具体取决于可用的内容。您需要确保使用pylibmc
,因为这是MemCachier支持的内容。
其次,似乎MemCachier没有记录认证方案。您应该阅读pylibmc的来源,看看它是如何处理的。
我认为您必须升级celery.backends.cache.CacheBackend
才能添加auth支持。
答案 1 :(得分:0)
我最终搞清楚了。诀窍是不要通过需要身份验证的CELERY_RESULT_BACKEND
创建对缓存的新引用,而是使用对(已经过身份验证的)django缓存后端的引用。
换句话说,一旦你有这个工作:
In [1]: from django.core.cache import cache
In [2]: cache.set('foo', 'bar')
Out[2]: True
In [3]: cache.get('foo')
Out[3]: 'bar'
芹菜后端可以配置为使用这样的缓存:
CELERY_RESULT_BACKEND = 'djcelery.backends.cache:CacheBackend'