43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
"""
|
|
Gunicorn configuration for Inventarsystem.
|
|
|
|
This configuration ensures that:
|
|
1. The BackgroundScheduler runs reliably in only one worker process
|
|
2. Appointment status updates and reminders work correctly
|
|
3. Multi-worker deployments don't cause race conditions
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# Get project root
|
|
PROJECT_ROOT = Path(__file__).parent
|
|
|
|
# Basic configuration
|
|
bind = "unix:/tmp/inventarsystem.sock"
|
|
workers = 1 # CRITICAL: Only 1 worker to prevent BackgroundScheduler race conditions
|
|
worker_class = "sync"
|
|
timeout = 60
|
|
graceful_timeout = 20
|
|
max_requests = 1000
|
|
max_requests_jitter = 100
|
|
|
|
# Logging
|
|
accesslog = str(PROJECT_ROOT / "logs" / "access.log")
|
|
errorlog = str(PROJECT_ROOT / "logs" / "error.log")
|
|
log_level = "info"
|
|
capture_output = True
|
|
|
|
# Worker initialization hook to ensure scheduler starts only once
|
|
def on_starting(server):
|
|
"""Called just before the master process is initialized."""
|
|
print("[GUNICORN] Starting Inventarsystem with scheduler support (1 worker only)")
|
|
|
|
def when_ready(server):
|
|
"""Called just after the server is started."""
|
|
print("[GUNICORN] Server is ready. Scheduler should be active in the single worker process.")
|
|
|
|
# Ensure the logs directory exists
|
|
os.makedirs(PROJECT_ROOT / "logs", exist_ok=True)
|