2012-07-20 71 views
1

我正在Celery和MongoDB運行Django項目作爲我的經紀人,在當地正常工作。我沒有使用django-celery。該項目位於../myapp/這看起來是這樣的:芹菜任務註冊並在本地運行良好 - 切換到EC2和芹菜不註冊他們

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

在這種情況下,我只是在運行的aws/tasks.py原型add()芹菜例如,它包含:

@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上的芹菜不註冊任務?

+0

當'[任務]'爲空時,您是否使用-l info啓動工作人員? – asksol 2012-07-24 15:48:26

+0

btw,當你使用django-celery時,不會使用celeryconfig.py ... – asksol 2012-07-24 15:49:02

+0

對不起,看到你現在沒有使用django-celery。我想你應該嘗試在你的tasks.py模塊中添加print語句來查看worker是否完全導入它。 – asksol 2012-07-24 15:50:09

回答

1

事實證明這是一個錯誤與我PYTHONPATH在EC2上。我正在研究的項目中的任務生活在/www/sites/siteA。我有另一個項目,住在/www/sites/siteB。這兩個文件夾都有一個名爲aws/的文件夾。

但是,我的PYTHONPATH看起來像這樣:/www/sites/siteB:/www/sites/siteA

當我交換訂單時,celeryd能夠提取並註冊任務。

+0

感謝所有那些試圖幫助的人! – neptune 2012-07-24 21:36:33

-1

celeryconfig.py是否粘貼到本地和EC2實例上完全相同?我問,因爲你芹菜進口線有句法錯誤。對於具有一個元素的元組,需要尾隨逗號,否則事情將不會如您期望的那樣。應該是:的

CELERY_IMPORTS = ("aws.tasks",)

代替

CELERY_IMPORTS = ("aws.tasks")

+0

嗨mateo,感謝您花時間回覆。我實際上在元組中有多個元素,它讀取(「aws.tasks」,「aws.otherTasks」),所以我不認爲是這樣。 – neptune 2012-07-20 23:12:24