【问题标题】:Celery doesn't see tasks when django DEBUG is set to False当 django DEBUG 设置为 False 时,Celery 看不到任务
【发布时间】:2018-01-18 14:50:28
【问题描述】:

我有一个带有 Celery 的 Django 应用程序。任务在不同应用程序中使用@shared_task 描述在tasks.py 文件中,每个都有自己的AppConfig 并且正在正确安装(添加到INSTALLED_APP)。

在我关闭 DEBUG 之前一切正常。由于未注册类型的任务,Celery 开始失败。使用 DEBUG 变量 Celery 可以看到我的所有任务并正常工作。

编辑: 我的 celery.py 代码如下:

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')

app = Celery('APP')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

运行manage.py检查没有错误,所有配置文件和日志都有正确的权限。

什么会导致这样的错误?

【问题讨论】:

标签: python django celery


【解决方案1】:

造成如此奇怪错误的原因是我的日志文件权限。

我的 settings.py 中有以下内容:

if not DEBUG:
    WORKER_HANDLERS = {}
    for app in PROJECT_APPS:
        WORKER_HANDLERS['file_{0}'.format(app)] = {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/var/log/app/{0}.log'.format(app),
        }

    LOGGING['handlers'].update(WORKER_HANDLERS)

在 postinst 脚本中安装我的 DEBIAN 包时,我从 root 调用 collectstatic 命令,该命令创建了我所有归 root 拥有的日志文件。

这就是 celery 无法运行的原因:实际上启动我的应用时出错。

但奇怪的是manage.py check 说一切正常。

注意日志文件的文件权限。

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 2013-12-03
    • 2019-11-04
    • 2021-05-10
    • 2021-11-05
    • 2018-05-29
    • 2013-03-25
    • 2020-09-03
    • 2014-09-09
    相关资源
    最近更新 更多