1

Celery と MongoDB をローカルで正常に動作するブローカーとして Django プロジェクトを実行しています。私は使用していませんdjango-celery。プロジェクトは../myapp/次のような場所にあります。

myapp/
    <other folders>
    aws/
        tasks.py
    celeryconfig.py
    settings.py 

この場合、プロトタイプのadd()Celery の例を で実行しているだけで、次のaws/tasks.py内容が含まれています。

@task
def add(x, y):
    return x+y

celeryd --loglevel=INFOコマンドラインで実行すると、タスクのリストが正常に登録され、表示されます

[Tasks]    
. aws.tasks.add
. (all other tasks in tasks.py)

では、ここで問題です。Python インタープリターで以下の行を実行すると、ローカル マシンで正常に動作します

>>> from aws.tasks import add
>>> result = add.delay(7,7)
>>> result.get() 
14

しかし、EC2 でセロリを起動しようとすると、タスクが登録済みとしてリストされず、上記の行が失敗し、エラーが発生します

Received unregistered task of type 'aws.tasks.add'.
The message has been ignored and discarded.

Did you remember to import the module containing this task?
Or maybe you are using relative imports?
Please see http://bit.ly/gLye1c for more information.

これが私のものceleryconfig.pyです:

BROKER_URL = "mongodb://localhost:27017/rawDatabase"


CELERY_RESULT_BACKEND = "mongodb"
CELERY_MONGODB_BACKEND_SETTINGS = {
    "host": "localhost",
    "port": 27017,
    "database": "rawDatabase"
}


CELERY_IMPORTS = ("aws.tasks")

私のsettings.py内容:

INSTALLED_APPS = (
     ...
     'aws',
     ...
)

はい、私のPYTHONPATH内容が含まれている../myapp/ので、celeryconfig.py を選択する必要があります。

何がこれを引き起こしているのでしょうか?EC2 のセロリがタスクを登録しないのはなぜですか?

4

2 に答える 2

1

PYTHONPATH私のEC2のエラーであることがわかりました。私が取り組んでいるプロジェクトには、タスクが含まれています/www/sites/siteA。に住んでいる別のプロジェクトがあります/www/sites/siteB。両方のフォルダに というフォルダがありますaws/

しかし、私は次のようにPYTHONPATH見えました: /www/sites/siteB:/www/sites/siteA.

順序を入れ替えると、celeryd がタスクをピックアップして登録することができました。

于 2012-07-24T21:36:13.807 に答える
-1

貼り付けたceleryconfig.pyは、ローカルインスタンスとEC2インスタンスでまったく同じですか?セロリの輸入ラインに構文上の間違いがあるのでお願いします。要素が1つあるタプルの場合、末尾にコンマが必要です。そうしないと、期待どおりに動作しません。する必要があります:

CELERY_IMPORTS = ("aws.tasks",)

それ以外の

CELERY_IMPORTS = ("aws.tasks")

于 2012-07-20T22:50:31.913 に答える