2012-02-25 7 views
2

私はこのkeyErrorを得続けます。私は文字列とID(整数)をタスク関数に送るので、シリアル化の問題ではないと思います。また、keyerrorは、内容ではなく関数自体への経路にあるとも言われています。助けてください。なぜ私の仕事を実行するとセロリがKeyErrorを返すのですか?

Tasks.py

from celery.decorators import task 
from notification import models as notification 

@task(ignore_result=True) 
def notify_match_creation(match, home_team, away_team, home_team_captain, away_team_captain): 
    notification.send(User.objects.filter(profile__teams__pk__in=(home_team, away_team)), 
         "tournaments_new_match", 
         {'match': unicode(match), 
         'home_team_captain': home_team_captain, 
         'away_team_captain': away_team_captain, 
         }) 

関連設定

CELERY_RESULT_BACKEND = "database" 
CELERY_RESULT_DBURI = "postgresql://user:[email protected]/ahgl" 
BROKER_HOST = "localhost" 
BROKER_PORT = 5672 
BROKER_USER = "guest" 
BROKER_PASSWORD = "guest" 
BROKER_VHOST = "/" 

セロリ出力:

[タスク]

. apps.tournaments.tasks.notify_match_creation 
    . tournaments.tasks.notify_match_creation 
[2012-02-25 02:34:06,209: WARNING/MainProcess] [email protected] has started. 
[2012-02-25 02:34:06,477: WARNING/PoolWorker-4] E:\Webdesign\ahgl\ENV\lib\site-packages\djcelery\loaders.py:84: UserWarn 
ing: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! 
    warnings.warn("Using settings.DEBUG leads to a memory leak, never " 
[2012-02-25 02:34:06,479: WARNING/PoolWorker-2] E:\Webdesign\ahgl\ENV\lib\site-packages\djcelery\loaders.py:84: UserWarn 
ing: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! 
    warnings.warn("Using settings.DEBUG leads to a memory leak, never " 
[2012-02-25 02:34:06,523: WARNING/PoolWorker-3] E:\Webdesign\ahgl\ENV\lib\site-packages\djcelery\loaders.py:84: UserWarn 
ing: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! 
    warnings.warn("Using settings.DEBUG leads to a memory leak, never " 
[2012-02-25 02:34:06,566: WARNING/PoolWorker-1] E:\Webdesign\ahgl\ENV\lib\site-packages\djcelery\loaders.py:84: UserWarn 
ing: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! 
    warnings.warn("Using settings.DEBUG leads to a memory leak, never " 
[2012-02-25 02:34:31,520: INFO/MainProcess] Got task from broker: apps.tournaments.tasks.notify_match_creation[4dbd6258- 
5cee-49e9-8c8a-2d2105a2d52a] 
[2012-02-25 02:34:31,569: ERROR/MainProcess] Task apps.tournaments.tasks.notify_match_creation[4dbd6258-5cee-49e9-8c8a-2 
d2105a2d52a] raised exception: KeyError('apps.tournaments.tasks.notify_match_creation',) 
Traceback (most recent call last): 
    File "E:\Webdesign\ahgl\ENV\lib\site-packages\celery\concurrency\processes\pool.py", line 211, in worker 
    result = (True, func(*args, **kwds)) 
    File "E:\Webdesign\ahgl\ENV\lib\site-packages\celery\worker\job.py", line 50, in execute_and_trace 
    task = tasks[name] 
KeyError: 'apps.tournaments.tasks.notify_match_creation' 
[2012-02-25 02:38:29,773: WARNING/MainProcess] celeryd: Hitting Ctrl+C again will terminate all running tasks! 
[2012-02-25 02:38:29,773: WARNING/MainProcess] celeryd: Warm shutdown (MainProcess) 
[2012-02-25 02:38:31,779: INFO/MainProcess] process shutting down 

答えて

2

あなたが拾っますタスクが

tournaments.tasks.notify_match_creation (#1) 

であり、あなたが呼び出す前に、キーエラーでそれが

KeyError: 'apps.tournaments.tasks.notify_match_creation' 

であることがわかり、セロリの出力で

+0

揃えることができ

celery worker -A apps.tournaments.tasks.notify_match_creation 

を試してみてください:タスクを呼び出して、私のmodels.pyで 、 「トーナメント」 : from .tasks import notify_match_creation どちらが間違っていますか?リンクのような絶対パスを入れない... –

+0

私は、(redisストレージを使用している)プロダクションに展開すると完全に動作することを指摘しますが、ローカルではDjangoストレージを使用します。 –

+0

実際、問題はNotRegisteredエラーが発生することを意味すると言いますから、私はこれがそれだとは思わないのです。 –

0

http://docs.celeryproject.org/en/latest/userguide/tasks.html#automatic-naming-and-relative-importsを参照してください。セロリのタスクでは、セレクトされるセロリのタスク(#1)と同じ名前(構造)でインポートされていることを確認してください。相対輸入権を取得するには、上のasksolのリンクを参照してください。あなたがセロリを起動

一つの可能​​な解決策、 - これはあなたのタスク名私のインストール済みのアプリケーションで

関連する問題