我遇到了与此类似的问题:"未知任务";发布新任务时,芹菜花出现错误
然而,我正在运行flower 0.7.3,它已经修复了上一期中提到的问题。当我装载花时,我看到以下内容:
[D 141025 19:22:44州:87]注册:{'celery@myhost':['crossbar.tasks.add.add','crossbar.tasks.ping.ping','crossbr.tasks.send_email.send_email','crossbr.tasks.send_message.send_message','crossbr.tasks.send_sms.send_sms']}[D 141025 19:22:49事件:116]启用事件[D 141025 19:22:50状态:153]恢复检查工人。。。[I 141025 19:22:50 tasks:99]调用带有"[1,2]"one_answers"{}"的任务"crossbar.tasks.add.add"[W 141025 19:22:50 web:1404]404 POST/api/task/async-apply/cocrossr.tasks.add.add(127.0.0.1):未知任务'crossbr.tasks.add.add'[W 141025 19:22:50 web:1811]404 POST/api/task/async-apply/cocrossr.tasks.add.add(127.0.0.1)1.11ms
但正如你所看到的POST失败,我试图发布如下:
curl-X POST-d'{"args":[1,2]}'http://myhost:15629/api/task/async-apply/crossbr.tasks.add.add
以下是我如何运行Celery:芹菜-myapp工作人员-loglevel=info
我在一个分离的过程中运行花朵,就像这样:flower--conf=src/crossbr/flowerconfig.py
如果我用发送任务替换异步应用程序,我会得到200,但在芹菜控制台上我会得到以下错误:
〔2014-10-26 17:03:06640:CRITICAL/MainProcess]无法解码消息正文:ContentDisabled('拒绝反序列化pickle(application/x-python-serialize)类型的不受信任的内容',)〔type:‘application/x-ppython-serialize’encoding:‘binary’headers:{}〕body:'\x80\x02}q\x01(U\x07expiresq\x02U\x03utcq\x03\x08U\x04argsq\x04]q\x05 4taskq\rX\x16\x00\x00\x0crossbar.tasks.add.addq\x0eU\timelimitq\x0fNN\x86q\x10U\x03etaq\x11NU\x06wargsq\x12}q\x13u。'(229b)追踪(最近一次通话):文件"/Users/psantan/Documents/git/cocrossbr-taskmgr_trunk/.tox/cocrossbr taskmgr/lib/python2.6/site packages/kombu/messaging.py",第586行,在_receive_callback中decoded=如果_m-else-message.decode(),则无文件"/Users/psantan/Documents/git/cocrossbr-taskmgr_trunk/.tox/cocrossbr taskmgr/lib/python2.6/site packages/kombu/message.py",第142行,解码self.content_encoding,accept=self.accept)文件"/Users/psantan/Documents/git/rcrossbr-taskmgr_trunk/.tox/rcrossbR-taskmgr/lib/python2.6/site packages/kombu/serialization.py",第174行,加载中提升自我_for_untrusted_content(content_type,"不可信")ContentDisabled:拒绝反序列化pickle类型的不受信任的内容(application/x-python-serialize)
好吧,如果我将"pickle"添加到可接受的内容列表中,我就不会再出现序列化错误了。然而,flower仍然不知道我的任务,因此异步应用程序不起作用。我无法让flower-A应用程序为我工作,因为我不是通过芹菜应用程序初始化它,而是使用flowerconfig.py。在flowerconfig.py中,我有celery_IMPORTS设置,但实际任务来自不同的python包。登记那些有花的人的正确方式是什么?
看起来您没有将app
参数传递给flower。要启动flower,您需要使用调用它
flower -A your_app
或
celery flower -A your_app
如果不传递app
参数,它将抛出404错误。