У меня есть проект 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, и сельдерей подберет их. Вещи начинают выглядеть хорошо.