Не удается заставить django celeryd работать в Windows

У меня есть проект django, который отлично работает с сервером запуска, расположенным в:

D:\EverTabs\work\evertabs-website\src\evertabs\

Мои settings.py и manage.py находятся по указанному выше пути.

Я открываю надежную оболочку cmd, перехожу в этот каталог и запускаю manage.py celeryd, получаю исключение со следующей ошибкой:

ImportError: Could not import settings 'evertabs.settings' (Is it on sys.path?): No module named evertabs.settings

справедливо. Google и StackOverflow спешат на помощь, и я нахожу ответ. Мне нужно предоставить --settings=settings команде. Странно, так как runserver не нуждается в --settings=settings, но такова жизнь. Я готов пойти на компромисс. Я продолжаю получать сообщение об ошибке:

Traceback (most recent call last):
  File "C:\Progra~1\Python26\lib\multiprocessing\process.py", line 231, in _bootstrap
    self.run()
  File "C:\Progra~1\Python26\lib\multiprocessing\process.py", line 88, in run
    self._target(*self._args, **self._kwargs)
  File "c:\program files\python26\lib\site-packages\celery-2.4.6-py2.6.egg\celery\concurrency\processes\pool.py", line 173, in worker
    initializer(*initargs)
  File "c:\program files\python26\lib\site-packages\celery-2.4.6-py2.6.egg\celery\worker\__init__.py", line 64, in process_initializer
    app.loader.init_worker()
  File "c:\program files\python26\lib\site-packages\celery-2.4.6-py2.6.egg\celery\loaders\base.py", line 100, in init_worker
    self.on_worker_init()
  File "c:\program files\python26\lib\site-packages\django_celery-2.4.2-py2.6.egg\djcelery\loaders.py", line 92, in on_worker_init
    autodiscover()
  File "c:\program files\python26\lib\site-packages\django_celery-2.4.2-py2.6.egg\djcelery\loaders.py", line 114, in autodiscover
    for app in settings.INSTALLED_APPS])
  File "c:\program files\python26\lib\site-packages\django_celery-2.4.2-py2.6.egg\djcelery\loaders.py", line 124, in find_related_module
    app_path = importlib.import_module(app).__path__
  File "build\bdist.win32\egg\importlib\__init__.py", line 37, in import_module
ImportError: No module named evertabs

Поэтому я энергично чешу затылок и решаю, что, может быть, если я скормлю этому парню другой pythonpath, он займет достойное место. Моя следующая попытка:

manage.py celeryd --pythonpath=D:\EverTabs\work\evertabs-website\src\

Теперь мы получаем где-то! Нет ошибок. Однако мой celeryconfig.py, который находится в том же каталоге, что и settings.py, не обрабатывается. Ни одна из моих задач не загружается. Я дошел до того, что добавил синтаксическую ошибку в celeryconfg.py, чтобы доказать себе, что он не загружается.

Следующим шагом, который я сделал, было использование manage.py из django 1.4. Этот manage.py помещается в D:\EverTabs\work\evertabs-website\src\, а не в D:\EverTabs\work\evertabs-website\src\evertabs\. На данный момент я могу выполнить celeryd с простым синтаксисом, и мне не нужно добавлять в pythonpath. Тем не менее, мой celeryconfig.py остался нетронутым:

D:\EverTabs\work\evertabs-website\src>manage.py celeryd

Дальнейшие исследования показывают, что если я добавлю tasks.py в каталог верхнего уровня 9, где находится settings.py). Celery автоматически обнаружит их. Это сработало. однако celeryconfig.py все еще не обрабатывается, поэтому я не могу делать там более сложную конфигурацию. Пока это не проблема, так как мои задачи наконец-то найдены. Однако меня очень беспокоит, что celeryconfig.py не обрабатывается.

Теперь меня осенило, что, возможно, современный сельдерей не ищет celeryconfig.py в конце концов. Я могу просто поместить эти настройки в свой файл settings.py, и сельдерей подберет их. Вещи начинают выглядеть хорошо.


person Krystian Cybulski    schedule 12.02.2012    source источник


Ответы (2)


django-celery использует settings.py в качестве файла конфигурации сельдерея.

Другое основное отличие заключается в том, что значения конфигурации хранятся в модуле settings.py ваших проектов Django, а не в celeryconfig.py.

http://ask.github.com/django-celery/introduction.html

person mher    schedule 13.02.2012
comment
Да, было бы полезно прочитать всю документацию перед настройкой. Однако в начале урока говорилось, что настроить django-celery намного проще, чем кажется, поэтому я последовал маркетинговому сообщению. - person Krystian Cybulski; 13.02.2012

Краткое описание того, что я сделал, чтобы заставить сельдерей работать:

  1. Используйте либо --pythonpath, чтобы указать на каталог над каталогом вашего проекта, чтобы сельдерей мог импортировать project.settings, либо переместите свой manage.py на один уровень вверх и используйте manage.py, который генерирует django 1.4.

  2. Создайте tasks.py на верхнем уровне вашего проекта (где находится settings.py), и сельдерей автоматически обнаружит их. Если вы хотите использовать другой модуль, добавьте CELERY_IMPORTS = ("yourproject.anothermodule", ) в свой settings.py, чтобы сельдерей мог искать задачи внутри anothermodule.

  3. Забудьте о celeryconfig.py, который упоминается в некоторой документации. Просто задайте все настройки прямо в своем settings.py

person Krystian Cybulski    schedule 12.02.2012