From 91ef71da7a1935feaae5838610032187176392e2 Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Wed, 21 Aug 2024 10:00:58 -0400 Subject: [PATCH] Fix scheduler --- backend/server/adventures/apps.py | 5 ++-- .../management/commands/start_scheduler.py | 30 +++++++++++++++++++ backend/server/adventures/scheduler.py | 7 ++--- docker-compose.yml | 4 +-- 4 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 backend/server/adventures/management/commands/start_scheduler.py diff --git a/backend/server/adventures/apps.py b/backend/server/adventures/apps.py index 393e5ad..8fc4664 100644 --- a/backend/server/adventures/apps.py +++ b/backend/server/adventures/apps.py @@ -7,5 +7,6 @@ class AdventuresConfig(AppConfig): def ready(self): if settings.SCHEDULER_AUTOSTART: - from .scheduler import start_scheduler - start_scheduler() \ No newline at end of file + from django.core.management import call_command + import threading + threading.Thread(target=call_command, args=('start_scheduler',)).start() \ No newline at end of file diff --git a/backend/server/adventures/management/commands/start_scheduler.py b/backend/server/adventures/management/commands/start_scheduler.py new file mode 100644 index 0000000..95b9aa0 --- /dev/null +++ b/backend/server/adventures/management/commands/start_scheduler.py @@ -0,0 +1,30 @@ +from django.core.management.base import BaseCommand +from django.db import connections +from django.db.utils import OperationalError +import time +from adventures.scheduler import start_scheduler +import logging + +logger = logging.getLogger(__name__) + +class Command(BaseCommand): + help = 'Starts the APScheduler' + + def handle(self, *args, **options): + self.stdout.write('Waiting for database...') + db_conn = None + while not db_conn: + try: + db_conn = connections['default'] + except OperationalError: + self.stdout.write('Database unavailable, waiting 1 second...') + time.sleep(1) + + self.stdout.write(self.style.SUCCESS('Database available!')) + + start_scheduler() + self.stdout.write(self.style.SUCCESS('Scheduler started successfully')) + + # Keep the command running + while True: + time.sleep(60) \ No newline at end of file diff --git a/backend/server/adventures/scheduler.py b/backend/server/adventures/scheduler.py index fc087a4..f6bd785 100644 --- a/backend/server/adventures/scheduler.py +++ b/backend/server/adventures/scheduler.py @@ -1,5 +1,3 @@ -# scheduler.py - import logging from apscheduler.schedulers.background import BackgroundScheduler from django_apscheduler.jobstores import DjangoJobStore @@ -25,12 +23,11 @@ def start_scheduler(): scheduler.add_job( run_worldtravel_seed, trigger="interval", - hours=24, + minutes=3, id="worldtravel_seed", max_instances=1, replace_existing=True, ) logger.info("Starting scheduler...") - scheduler.start() - return scheduler \ No newline at end of file + scheduler.start() \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 871e5d3..01555d2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,8 +23,8 @@ services: - postgres_data:/var/lib/postgresql/data/ server: - #build: ./backend/ - image: ghcr.io/seanmorley15/adventurelog-backend:latest + build: ./backend/ + #image: ghcr.io/seanmorley15/adventurelog-backend:latest environment: - PGHOST=db - PGDATABASE=database