From 150832419afcdbf2cf58f61501258d93ea40b02d Mon Sep 17 00:00:00 2001 From: ramvignesh-b Date: Wed, 29 Apr 2026 02:20:18 +0530 Subject: [PATCH] feat: enable scheduler execution in Docker by checking UVICORN_MAIN environment variable --- backend/Dockerfile | 3 ++- backend/letters/apps.py | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index dd60c38..d331a7e 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -12,4 +12,5 @@ COPY . . EXPOSE 8000 -CMD ["sh", "-c", "uv run manage.py migrate && uv run gunicorn --bind 0.0.0.0:8000 --access-logfile - --error-logfile - --capture-output --log-level debug config.wsgi:application"] +# NOTE: Exporting env var 'UVICORN_MAIN=true' is required for the scheduler to run on app start. +CMD ["sh", "-c", "uv run manage.py migrate && UVICORN_MAIN=true uv run gunicorn --bind 0.0.0.0:8000 --access-logfile - --error-logfile - --capture-output --log-level debug config.wsgi:application"] diff --git a/backend/letters/apps.py b/backend/letters/apps.py index d420deb..1f0348f 100644 --- a/backend/letters/apps.py +++ b/backend/letters/apps.py @@ -10,9 +10,13 @@ class LettersConfig(AppConfig): """ Start the scheduler only when the server is starting. NOTE: If we don't check for RUN_MAIN, the scheduler triggers for all django operations (migration, test etc.) + NOTE++: For uvicorn, we make sure to set the env var `UVICORN_MAIN` to `true` in the docker command. """ - - if not (os.environ.get("RUN_MAIN") == "true" or os.environ.get("WERKZEUG_RUN_MAIN") == "true"): + if not ( + os.environ.get("RUN_MAIN") == "true" + or os.environ.get("WERKZEUG_RUN_MAIN") == "true" + or os.environ.get("UVICORN_MAIN") == "true" + ): return from .tasks import start_scheduler