gpt4 book ai didi

python - ImageKit 异步错误 - 无法解码消息正文

转载 作者:太空宇宙 更新时间:2023-11-04 10:36:47 31 4
gpt4 key购买 nike

我正在使用 Django 1.6 和 Django-ImageKit 3.2.1。

我正在尝试使用 ImageKit 异步生成图像。异步图像生成在本地工作,但在生产服务器上不工作。

我正在使用 Celery 并且我都尝试过:

IMAGEKIT_DEFAULT_CACHEFILE_BACKEND = 'imagekit.cachefiles.backends.Async'

IMAGEKIT_DEFAULT_CACHEFILE_BACKEND = 'imagekit.cachefiles.backends.Celery'

使用 Simple 后端(同步)代替 AsyncCelery 在生产服务器上运行良好。所以我不明白为什么异步后端会给我以下 ImportError(从 Celery 日志中提取):

[2014-04-05 21:51:26,325: CRITICAL/MainProcess] Can't decode message body: DecodeError(ImportError('No module named s3utils',),) [type:u'application/x-python-serialize' encoding:u'binary' headers:{}]

body: '\x80\x02}q\x01(U\x07expiresq\x02NU\x03utcq\x03\x88U\x04argsq\x04cimagekit.cachefiles.backends\nCelery\nq\x05)\x81q\x06}bcimagekit.cachefiles\nImageCacheFile\nq\x07)\x81q\x08}q\t(U\x11cachefile_backendq\nh\x06U\x12ca$
Traceback (most recent call last):
File "/opt/python/run/venv/lib/python2.6/site-packages/kombu/messaging.py", line 585, in _receive_callback
decoded = None if on_m else message.decode()
File "/opt/python/run/venv/lib/python2.6/site-packages/kombu/message.py", line 142, in decode
self.content_encoding, accept=self.accept)
File "/opt/python/run/venv/lib/python2.6/site-packages/kombu/serialization.py", line 184, in loads
return decode(data)
File "/usr/lib64/python2.6/contextlib.py", line 34, in __exit__
self.gen.throw(type, value, traceback)
File "/opt/python/run/venv/lib/python2.6/site-packages/kombu/serialization.py", line 59, in _reraise_errors
reraise(wrapper, wrapper(exc), sys.exc_info()[2])
File "/opt/python/run/venv/lib/python2.6/site-packages/kombu/serialization.py", line 55, in _reraise_errors
yield
File "/opt/python/run/venv/lib/python2.6/site-packages/kombu/serialization.py", line 184, in loads
return decode(data)
File "/opt/python/run/venv/lib/python2.6/site-packages/kombu/serialization.py", line 64, in pickle_loads
return load(BytesIO(s))
DecodeError: No module named s3utils

s3utils 定义了我的 AWS S3 存储桶路径。如果需要,我会发布它,但我认为奇怪的是,同步后端在导入 s3utils 时没有问题,而异步则...并且异步仅在生产服务器上执行,而不是在本地执行。

如果有任何调试帮助,我将不胜感激。我已经为此奋斗了好几天。我还在学习 Django 和 python,所以我希望这是我犯的一个愚蠢的错误。我的谷歌失败了。

最佳答案

正如我在上面的评论中暗示的那样,这种事情通常是由于忘记重启 worker 造成的。

这是 Celery 的常见问题。工作人员是与您的 Web 服务器分开的进程,因此他们加载了自己的代码版本。就像您的 Web 服务器一样,如果您对代码进行了更改,则需要重新加载才能看到更改。 Web 服务器不是通过直接运行代码,而是通过 the broker 传递序列化消息与您的工作人员对话。 ,它会说类似“调用函数 do_something()”。然后工作人员将读取该消息,并且——这是棘手的部分——调用它的版本 do_something()。所以即使你重新启动你的网络服务器(这样它就有了你的代码的新版本),如果你忘记重新加载 worker(这是实际调用函数的地方),旧版本的函数将被调用。换句话说,您需要在任何时候对任务进行更改时重新启动 worker。

您可能想查看 the autoreload option为了发展。它可以让您省去一些麻烦。

关于python - ImageKit 异步错误 - 无法解码消息正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22888235/

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