Я использую Django 1.6 и Django-ImageKit 3.2.1.ImageKit async error - невозможно декодировать тело сообщения
Я пытаюсь генерировать изображения асинхронно с ImageKit. Асинхронное создание изображений работает локально, но не на рабочем сервере.
Я использую сельдерей, и я попытался как:
IMAGEKIT_DEFAULT_CACHEFILE_BACKEND = 'imagekit.cachefiles.backends.Async'
IMAGEKIT_DEFAULT_CACHEFILE_BACKEND = 'imagekit.cachefiles.backends.Celery'
Использование Simple
бэкэнд (синхронно) вместо Async
или Celery
отлично работает на сервере. Так что я не понимаю, почему асинхронная бэкенд дает мне ImportError (вытянуто из журнала сельдерея):
[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, поэтому я надеюсь, что это глупая ошибка с моей стороны. Мой Google-фу провалил меня.
Вы недавно перезапустили своего работника сельдерея? – matthewwithanm
Как часто следует возобновлять работу сельдерея? Кажется, это сработало - СПАСИБО! Как новичок, это даже не перешло мне в голову. Я рад, что это было простое решение. И спасибо за вашу работу над ImageKit! Если вы хотите опубликовать свой комментарий в качестве ответа, я пойду дальше и отметю его. – user2616836
Спасибо за приятные слова (: – matthewwithanm