1

定期的なタスクを実行するためにCeleryでDjangoを使用し、歩哨クライアントとしてRavenを使用しています。

これまでのところ、セロリビートでいくつかのアプリを実行できましたが、すべて正常に機能しました。

何らかの理由で、私が取り組んでいる最近のアプリで、「sentry」ハンドラーを使用するようにルート ロガーを設定すると、定期的なタスクが実行されません。

「コンソール」ハンドラーのみを使用するようにルート ロガーを設定すると、機能します。

この問題の原因について頭を悩ませることはできません。

これは私のロギング辞書です:

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'root': {
    'level': os.environ.get('LOG_LEVEL','INFO'),
    'handlers': ['console'],
},
'filters': {
    'require_debug_false': {
        '()': 'django.utils.log.RequireDebugFalse'
    }
},
'handlers': {
    'mail_admins': {
        'level': 'ERROR',
        'filters': ['require_debug_false'],
        'class': 'django.utils.log.AdminEmailHandler'
    },
    'sentry': {
        'level': 'WARNING',
        'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
    },
    'console': {
        'level': 'DEBUG',
        'class': 'logging.StreamHandler',
    },
},
'loggers': {
    'django.request': {
        'handlers': ['mail_admins'],
        'level': 'ERROR',
        'propagate': True,
    },
    'raven': {
        'level': 'WARNING',
        'handlers': ['console','sentry'],
        'propagate': True,
    },
    'celery': {
        'handlers': ['console'],
        'level': 'DEBUG',
    },
}

}

そして、ルート ロガー ハンドラーを制御する環境変数:

    ENABLE_SENTRY = os.environ.get('ENABLE_SENTRY', 'FALSE') == 'TRUE'
    if (ENABLE_SENTRY):
        LOGGING['root']['handlers'] = ['console','sentry']

注: その変更後、ルート ロガーはコンソールにログを記録しないようです

これは、セロリビートとワーカーを実行する方法です。

python manage.py セロリ ワーカー -E -B --maxtasksperchild=1000 --concurrency=10 --loglevel=DEBUG -Ofair

これは私が使用しているパッケージの一部です:

セロリ==3.1.17 ジャンゴ-セロリ==3.1.16 カラス==5.0.0 Django==1.8.7

これは私の celery.py ファイルです:

"""
This module will hold celery configuration
"""
from __future__ import absolute_import
from django.conf import settings
import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE',     'ltg_backend_app.settings')

# init the celery app
app = Celery('ltg_backend_app')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

どんな助けでも大歓迎です!

4

1 に答える 1