【问题标题】:django-celery works in development, fails in wsgi production: How to debug?django-celery 在开发中工作,在 wsgi 生产中失败:如何调试?
【发布时间】:2012-01-14 07:34:25
【问题描述】:

我正在使用 django celery 任务队列,它在开发中运行良好,但在 wsgi 生产中根本不行。更令人沮丧的是,它曾经在生产环境中工作,但我不知怎么弄坏了它。

"sudo rabbitmqctl status" 告诉我 rabbitmq 服务器正在工作。在 django 中,一切似乎都很美好:对象被创建,并毫无问题地路由到任务管理器。但随后他们的状态只是无限期地保持“排队”状态。按照我编写代码的方式,一旦从 celery 任务返回任何内容,它们就应该切换到“错误”或“就绪”。所以我认为队列有问题。

两个相关问题:

  • 您知道问题可能是什么吗?
  • 如何调试 celery?在 manage.py celeryd 命令之外,我不确定如何查看它的内部工作原理。有日志文件或我可以使用的东西吗?

谢谢!

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

【问题讨论】:

    标签: django celery


    【解决方案1】:

    经过大量搜索,我找到的这个问题最完整的答案是here。这些方向充实了the skimpy official directions for daemonizing celeryd。我将在这里复制要点,但您应该点击链接,因为迈克尔已经更详细地解释了一些部分。

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

    1. /etc/init.d/celeryd
    2. /etc/default/celeryd
    3. myApp/settings.py

    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. 启动脚本

    这解决了我的问题。

    【讨论】:

    • 除github外的所有链接404
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的回答。这个问题在周末神秘地解决了。如果我了解有关该问题的任何新信息,我会在此处发布更新。
    • 所以,同样的问题再次出现。使用ps |您推荐的 grep 命令,很明显 celery 守护进程 没有 正在运行。我该如何启动它?可能是愚蠢的问题,但我找不到明确的说明。我只运行 nohup manage.py celeryd 吗?
    猜你喜欢
    • 1970-01-01
    • 2020-11-11
    • 2021-10-17
    • 2016-09-03
    • 2019-05-24
    • 1970-01-01
    • 2017-08-26
    • 2013-08-30
    • 2010-09-15
    相关资源
    最近更新 更多