Не удается заставить Django Celeryd работать на Windows - PullRequest
0 голосов
/ 13 февраля 2012

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

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

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

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

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

справедливо, достаточно.Гугл и 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

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

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, где находится файл setting.py).Сельдерей автоматически обнаружит их.Это сработало.тем не менее, celeryconfig.py по-прежнему не обрабатывается, поэтому я не могу выполнить более сложную настройку.Пока это не проблема, так как мои задачи наконец-то найдены.Однако меня очень беспокоит, что celeryconfig.py не обрабатывается.

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

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

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

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

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

0 голосов
/ 13 февраля 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

...