django-celery在开发中工作,在wsgi生产中失败:如何调试?

时间:2011-12-06 17:46:15

标签: django celery

我正在使用django芹菜任务队列,它在开发中工作正常,但在wsgi生产中根本没有。更令人沮丧的是,使用在制作中工作,但我以某种方式打破了它。

“sudo rabbitmqctl status”告诉我rabbitmq服务器正在运行。 django中的所有东西看起来都很好:创建对象并将其路由到任务管理器而不会出现问题。但是他们的状态只是无限期地“排队”。我编写代码的方式,只要从celery任务返回任何内容,就应该切换到“错误”或“准备好”。所以我假设队列有问题。

两个相关问题:

  • 任何想法可能是什么问题?
  • 如何调试芹菜?在manage.py celeryd命令之外,我不确定如何查看其内部工作。是否有日志文件或我可以使用的东西?

谢谢!

PS - 我见过this question,但他似乎想从manage.py而不是wsgi运行芹菜。

2 个答案:

答案 0 :(得分:2)

经过多次搜索,我发现这个问题的最完整答案是here。这些指示充实the skimpy official directions for daemonizing celeryd。我会复制这里的要点,但你应该按照链接,因为迈克尔已经更详细地解释了一些部分。

主要思想是你需要三个地方的脚本:

  1. /etc/init.d/celeryd
  2. 的/ etc /默认/ celeryd
  3. 对myApp / settings.py
  4. Settings.py似乎与开发模式中的相同。因此,如果已经设置,那么转向生产有四个步骤:

    1. 下载守护程序脚本,因为它未包含在安装中: https://github.com/celery/celery/tree/3.0/extra/generic-init.d/
    2. 将其放入/etc/init.d/celeryd
    3. 在/ etc / default / celeryd中创建一个文件,并将变量放入其中: http://docs.celeryproject.org/en/latest/tutorials/daemonizing.html#example-django-configuration
    4. 启动脚本
    5. 这解决了我的问题。

答案 1 :(得分:1)

我认为您没有得到芹菜任何回复的原因是因为芹菜服务器可能没有运行。你可以通过ps -ef |grep celeryd找到它。为了弄清楚在尝试运行celeryd时出现的错误,您可能需要执行以下操作。

在settings.py文件中,您可以提供芹菜日志文件CELERYD_LOG_FILE = <Path to the log file>的路径 在运行celeryd服务器时,您可以指定级别manage.py celeryd -l DEBUG