无法让django celeryd在Windows上工作

时间:2012-02-12 22:39:47

标签: django celery django-celery celeryd

我有一个django项目,它运行得很好,位于:

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

我的settings.py和manage.py位于上述路径中。

我打开可靠的cmd shell,cd到该目录并运行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

所以我大力抓挠我的头,并决定如果我给这个家伙喂一个不同的python路径,他会很好地放置。我的下一个尝试是:

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

现在我们到了某个地方!没有错误。但是,我的celeryconfig.py(与settings.py位于同一目录中)未得到处理。我的任务都没有加载。我把语法错误放到celeryconfg.py中,以证明自己没有被加载。

我做的下一步是使用django 1.4中的manage.py。此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 个答案:

答案 0 :(得分:1)

django-celery使用settings.py作为芹菜配置文件。

  

另一个主要区别是配置值存储在   你的Django项目的settings.py模块而不是   celeryconfig.py。

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

答案 1 :(得分:0)

我为使芹菜上班所做的事情的简短摘要:

  1. 使用--pythonpath指向项目目录上方的目录,以便芹菜可以导入project.settings或将manage.py上移一级并使用django 1.4生成的manage.py。

  2. 在项目的顶层(settings.py所在位置)创建tasks.py,芹菜会自动发现它们。如果您想使用其他模块,请将CELERY_IMPORTS = ("yourproject.anothermodule", )添加到您的settings.py中,以便芹菜可以查看anothermodule内部的任务。

  3. 忘记某些文档中提到的celeryconfig.py。只需将所有设置放在settings.py

  4. 中即可