2014-04-23 21 views
2

我正在運行芹菜3.1.11和花0.6.0。發佈新任務時,芹菜花中的「未知任務」錯誤

我有一個配置爲這樣的芹菜應用程序;

# myapp.tasks.celery.py 
from __future__ import absolute_import  

from celery import Celery 


class Config(object): 
    BROKER_URL = 'amqp://' 
    CELERY_RESULT_BACKEND = 'amqp' 

    CELERY_TASK_RESULT_EXPIRES = None 
    CELERY_RESULT_SERIALIZER = 'json' 
    CELERY_INCLUDE = [ 
     'myapp.tasks.source', 
     'myapp.tasks.page', 
     'myapp.tasks.diffusion', 
     'myapp.tasks.place', 
    ] 
) 

celery = Celery('myapp') 
celery.config_from_object(Config)  


if __name__ == '__main__': 
    celery.start() 

我使用下面的命令執行芹菜工人:

$ celery -A myapp.tasks worker --loglevel=INFO -E -Q celery 

我可以看到在工人的產出可用任務的完整列表。

[tasks] 
    ...  
    . myapp.tasks.diffusion.post_activity 
    ... 

我再執行該花的服務器使用以下命令:

$ celery -A myapp.tasks flower 

現在,每當我試圖通過花REST API來發布新的任務,我得到一個404錯誤與錯誤信息「未知任務TASK_NAME」。

[W 140423 12:16:17 web:1302] 404 POST /api/task/async-apply/myapp.tasks.diffusion.post_activity (82.225.61.194): Unknown task 'myapp.tasks.diffusion.post_activity' 
[W 140423 12:16:17 web:1728] 404 POST /api/task/async-apply/myapp.tasks.diffusion.post_activity (82.225.61.194) 4.68ms 

我已經把花API處理器一個PDB斷點,似乎可用時,請求被處理的唯一任務如下:

ipdb> pp celery.tasks 
{'celery.backend_cleanup': <@task: celery.backend_cleanup of yoda.tasks.celery:0x7fb9191eb490>, 
'celery.chain': <@task: celery.chain of yoda.tasks.celery:0x7fb9191eb490>, 
'celery.chord': <@task: celery.chord of yoda.tasks.celery:0x7fb9191eb490>, 
'celery.chord_unlock': <@task: celery.chord_unlock of yoda.tasks.celery:0x7fb9191eb490>, 
'celery.chunks': <@task: celery.chunks of yoda.tasks.celery:0x7fb9191eb490>, 
'celery.group': <@task: celery.group of yoda.tasks.celery:0x7fb9191eb490>, 
'celery.map': <@task: celery.map of yoda.tasks.celery:0x7fb9191eb490>, 
'celery.starmap': <@task: celery.starmap of yoda.tasks.celery:0x7fb9191eb490>} 

沒有任務似乎可用。但是,當我在shell中使用任務async_apply()方法時,該任務由工作人員執行。

任何想法我做錯了什麼?謝謝!

編輯:當我使用芹菜3.0.19和花0.5.0,它看起來似乎很有用。

+0

聞起來像PYTHPONPATH路給我。包含任務的模塊在哪裏?當你運行shell並執行'async_apply'時,你是否從你的源代碼目錄運行?這是可能的花服務器運行一個不同的PYTHONPATH。 – DeaconDesperado

+0

我從同一個目錄(這是我的程序包根目錄)運行worker和flower server。該shell也在這個相同的目錄中運行。 –

+0

你可以用pdb比較你的shell和花朵服務器之間的'sys.path'嗎?也許檢查他們是否不同? – DeaconDesperado

回答

0

我遇到了與flower類似的問題。我的配置使用了redis。

現在情況有所改善,我已經開始爲明確的期權「經紀」價值花(不要問我爲什麼)。

在你情我願嘗試

$ flower -r "amqp://" 

反正,我也將確保,你從一個環境,裏面有所有的庫適當的訪問開始celeryredis

+0

我試過了你的想法,但我仍然得到完全相同的錯誤。我確認切換回花0.5.0的作品。 –