2013-03-01 2 views
7

Я создал приложение Джанго-сельдерей, как в учебнике по адресу:Джанго сельдерей приложения - Нет модуль с именем ошибки сельдерея

http://docs.celeryproject.org/en/master/django/first-steps-with-django.html

Все отлично работает, когда я запускаю его без параметров приложения, как в:

$ python manage.py celery worker -l info 

, но я не могу запустить его на всех с параметром приложения, как:

$ python manage.py celery worker -A myapp -l info 

где MyApp это название дано приложение, когда я создал проект с:

$ python manage.py startapp myapp 

ошибка, что я получаю это:

ImportError: No module named celery 

Кто-нибудь знает, почему это происходит и как решить Это?

+3

Аргумент '-A' предназначен для применения в сельдерее, а не для приложений Django ... В настоящее время они не используются django-сельдереем. – asksol

+0

ах, я этого не знал. Спасибо за ответ. Но тогда как я могу запустить это? – Clara

+0

Celery 3.1 будет поддерживать django с нуля (но не имеет всех особенностей от django-celery, e.g нет бэкэнда базы данных и нет периодического планировщика задач базы данных, но вы можете использовать djcelery сверху, чтобы получить это). – asksol

ответ

14

Редактировать апреля 2014:

сельдерей документы были обновлены для 3.1; ниже решение теперь устарел, см:

http://docs.celeryproject.org/en/master/django/first-steps-with-django.html


По умолчанию, сельдерей ищет модуль с именем celery.py найти свою конфигурацию. Вы можете получить сельдерей использовать другое имя, чем celery.py по заданным it on the app argument - в этом примере, мы будем искать сельдерей конфигурацию в settings.py:

python manage.py celery worker --app=myapp.settings 

При использовании django-celery вы можете использовать либо выше вызов, чтобы начать сельдерей, или же, как я первоначально сделал и создать celery.py в моем пакете приложений myapp:

from settings import celery 

мой Джанго settings.py содержит нормальный сельдерея конфигурации:

from celery import Celery 

celery = Celery(broker="amqp://guest:[email protected]:5672//") 

celery.conf.update(
    CELERY_DEFAULT_QUEUE = "myapp", 
    CELERY_DEFAULT_EXCHANGE = "myapp", 
    CELERY_DEFAULT_EXCHANGE_TYPE = "direct", 
    CELERY_DEFAULT_ROUTING_KEY = "myapp", 
) 

Затем запустите сельдерея работника, как это:

python manage.py celery worker --app=myapp 

Просто для ясности, вот моя полная структура приложения:

myproject/ 
    manage.py 
    myapp/ 
     __init__.py 
     settings.py 
     celery.py 
+2

Я голосую +1, потому что это помогло мне понять, что конфигурация сельдерея - это немного черной магии, и я должен быть осторожным. Но вы должны отредактировать свой ответ, потому что это противоречиво. Почему у вас есть файл celery.py, если вы настраиваете сельдерей в settings.py? Или ты хотел сказать, что настраиваешь его на сельдерей. – Milimetric

+0

Просто обновил ответ, основываясь на лучшем понимании, которое у меня сейчас есть. @Milimetric У меня есть файл celery.py, который импортирует settings.py, так как по умолчанию это выглядит сельдерей. – mafrosis

+0

Если ваш код работает, и это с открытым исходным кодом, ссылка будет отличной. Спасибо за редактирование. – Milimetric

0

Убедитесь, что вы пытаетесь запустить сельдерея работника от каталог, который имеет доступ к модулю сельдерея. В моем случае я пытался запустить рабочего из каталога приложения, а не из проекта.