当django DEBUG设置为False时,Celery不会看到任务

时间:2018-01-18 14:50:28

标签: python django celery

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

一切正常,直到我关闭了DEBUG。由于未注册类型的任务,芹菜开始失败。使用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检查显示没有错误,所有配置文件和日志都有正确的权限。

什么会导致这样的错误?

1 个答案:

答案 0 :(得分:0)

导致这种奇怪错误的是我的日志文件权限。

我在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拥有的所有日志文件。

这就是芹菜未能运行的原因:实际上我的应用程序出错了。

但奇怪的是manage.py check说一切都还好。

小心日志文件的文件权限。