J'exécute Superset via Docker. J'ai activé la fonction de rapport par e-mail et l'ai essayé:
Cependant, je ne reçois que le rapport de test par e-mail. Je ne reçois aucun e-mail après.
Voici mon CeleryConfig dans 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='*'),
},
}
Le documentation dit que je dois exécuter le céleri et battre.
celery worker --app=superset.tasks.celery_app:app --pool=prefork -O fair -c 4
celery beat --app=superset.tasks.celery_app:app
Je les ai ajoutés au ' 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 travaille en effet lors de l'envoi du premier mail. Le fichier journal est également visible. Cependant, le battement de céleri semble ne pas fonctionner. Il n'y a pas non plus de 'celery_beat.log' créé.
Si vous souhaitez un aperçu plus approfondi, voici le commit avec l'implémentation complète de la fonctionnalité.
Comment configurer correctement le battement de céleri? Comment puis-je déboguer cela?
vous pouvez également ajouter -B
drapeau à la commande du céleri pour exécuter le battement
celery worker --app=superset.tasks.celery_app:app --pool=prefork -O fair -c 4 -B
Je pense que Celery doit fonctionner à l'intérieur de votre conteneur de sur-ensemble - vous devrez donc modifier votre fichier docker et votre point d'entrée.
MAIS vous devriez vraiment démoniser d'abord le céleri pour ne pas avoir à surveiller et redémarrer le céleri [voir comment détecter l'échec et redémarrer automatiquement le céleri ouvrier et http: // docs.celleryproject.org/en/latest/userguide/daemonizing.html circular .
Voir un exemple ici pour savoir comment exécuter un processus de céleri démonisé dans docker: Docker - Celery as a daemon - aucun pidfile trouvé