Я использую Superset через Docker. Я включил функцию отчета по электронной почте и попробовал ее:
Однако я получаю только тестовый отчет по электронной почте. После этого я не получаю никаких писем.
Это мой CeleryConfig в superset_config.py:
class CeleryConfig(object):
BROKER_URL = 'sqla+postgresql://superset:superset@db:5432/superset'
CELERY_IMPORTS = (
'superset.sql_lab',
'superset.tasks',
)
CELERY_RESULT_BACKEND = 'db+postgresql://superset:superset@db:5432/superset'
CELERYD_LOG_LEVEL = 'DEBUG'
CELERYD_PREFETCH_MULTIPLIER = 10
CELERY_ACKS_LATE = True
CELERY_ANNOTATIONS = {
'sql_lab.get_sql_results': {
'rate_limit': '100/s',
},
'email_reports.send': {
'rate_limit': '1/s',
'time_limit': 120,
'soft_time_limit': 150,
'ignore_result': True,
},
}
CELERYBEAT_SCHEDULE = {
'email_reports.schedule_hourly': {
'task': 'email_reports.schedule_hourly',
'schedule': crontab(minute=1, hour='*'),
},
}
Документация говорит, что мне нужно запустить работника сельдерея и бить.
celery worker --app=superset.tasks.celery_app:app --pool=prefork -O fair -c 4
celery beat --app=superset.tasks.celery_app:app
Я добавил их в 'docker -compose.yml ':
superset-worker:
build: *superset-build
command: >
sh -c "celery worker --app=superset.tasks.celery_app:app -Ofair -f /app/celery_worker.log &&
celery beat --app=superset.tasks.celery_app:app -f /app/celery_beat.log"
env_file: docker/.env
restart: unless-stopped
depends_on: *superset-depends-on
volumes: *superset-volumes
Celery Worker действительно работает при отправке первого электронного письма. Файл журнала также виден. Тем не менее, похоже, что ритм сельдерея не работает. Также не создается celery_beat.log.
Если вы хотите получить более глубокое понимание, - это коммит с полной реализацией функциональности.
Как правильно настроить сельдерей? Как я могу отладить это?