From 9aa26662c7f1cce262e6f0b21295656d9dada6bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bedna=C5=99=C3=ADk?= <jan.bednarik@gmail.com> Date: Mon, 4 Apr 2022 14:13:44 +0200 Subject: [PATCH] Celery setup improvements --- Dockerfile | 1 - Makefile | 4 ++++ README.md | 8 ++++++++ majak/settings/base.py | 6 ++++-- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index d33c43fc..08b4f2b3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,7 +29,6 @@ ENV DJANGO_SETTINGS_MODULE "majak.settings.production" # fake values for required env variables used to run collectstatic during build RUN DJANGO_SECRET_KEY=x DATABASE_URL=postgres://x/x DJANGO_ALLOWED_HOSTS=x \ OIDC_RP_CLIENT_ID=x OIDC_RP_CLIENT_SECRET=x OIDC_RP_REALM_URL=x \ - CELERY_BROKER_URL=x CELERY_RESULT_BACKEND=x \ python manage.py collectstatic EXPOSE 8000 diff --git a/Makefile b/Makefile index ca0bade0..bd5c9df7 100644 --- a/Makefile +++ b/Makefile @@ -15,6 +15,7 @@ help: @echo "Application:" @echo " run Run the application on port ${PORT}" @echo " shell Run Django shell" + @echo " worker Run Celery worker" @echo "" @echo "Database:" @echo " migrations Generate migrations" @@ -44,6 +45,9 @@ run: venv shell: venv ${VENV}/bin/python manage.py shell_plus +worker: venv + ${VENV}/bin/celery -A majak worker --pool solo -E -l INFO + migrations: venv ${VENV}/bin/python manage.py makemigrations diff --git a/README.md b/README.md index 8a340ac5..8e1ae0be 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,7 @@ Appka přidává management command `update_callendars`, který stahuje a updatu kalendáře. Je třeba ho pravidelně volat na pozadí (přes CRON). ### Celery (Import z Jekyllu) + Import z Jekyll GitHub repozitářů pirátských webů je řešen asynchroně přes Celery. Celery využívá Redis, který může běžet např. lokálně, typicky 6379: V envu pak je pak potřeba mít nastavený Celery broker: @@ -110,10 +111,15 @@ CELERY_RESULT_BACKEND=redis://localhost:6379/6 ``` Aby se celery tasky vykonávaly, je potřeba pustit celery v terminálu: + ``` celery -A majak worker ``` +Pokud není zadán `CELERY_BROKER_URL`, tak se automaticky nastaví +`CELERY_TASK_ALWAYS_EAGER = True`, čímž se tasky vykonají synchronně přímo v +procesu webserveru. + ### Stránka 404 Pokud je třeba vlastní 404 pro web, stačí do kořenové `xxxHomePage` webu @@ -142,6 +148,8 @@ V produkci musí být navíc nastaveno: | --- | --- | --- | | `DJANGO_SECRET_KEY` | | tajný šifrovací klíč | | `DJANGO_ALLOWED_HOSTS` | | allowed hosts (více hodnot odděleno čárkami) | +| `CELERY_BROKER_URL` | | URL pro Celery Broker | +| `CELERY_RESULT_BACKEND` | | URL pro Celery Result Backend | Různé: diff --git a/majak/settings/base.py b/majak/settings/base.py index 14e6a7ac..8025d23f 100644 --- a/majak/settings/base.py +++ b/majak/settings/base.py @@ -192,8 +192,10 @@ CACHES["renditions"]["TIMEOUT"] = 60 * 60 * 24 # CELERY # ------------------------------------------------------------------------------ -CELERY_BROKER_URL = env.str("CELERY_BROKER_URL") -CELERY_RESULT_BACKEND = env.str("CELERY_RESULT_BACKEND") +CELERY_BROKER_URL = env.str("CELERY_BROKER_URL", default="") +if not CELERY_BROKER_URL: + CELERY_TASK_ALWAYS_EAGER = True +CELERY_RESULT_BACKEND = env.str("CELERY_RESULT_BACKEND", default="") CELERY_ACCEPT_CONTENT = ["application/json"] CELERY_RESULT_SERIALIZER = "json" CELERY_TASK_SERIALIZER = "json" -- GitLab