From dbaa7b0d8bd0399f82a73b897f9cbe2512fdc68a Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 28 Feb 2026 09:24:02 +0000 Subject: [PATCH] Replace lifespan with on_event handlers for older FastAPI compat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The lifespan constructor parameter was added in FastAPI 0.93. When running outside Docker with an older system-packaged FastAPI, the parameter is silently ignored — the app starts and serves routes but init_db() and start_presence() never run, so the bot never goes online and webhooks crash with "Database not initialised". on_event("startup")/on_event("shutdown") work across all FastAPI versions. https://claude.ai/code/session_019ANRdyL2jfi7ysWhqN4PfD --- app/main.py | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/app/main.py b/app/main.py index 4fdefad..27d3676 100644 --- a/app/main.py +++ b/app/main.py @@ -1,5 +1,4 @@ import logging -from contextlib import asynccontextmanager from fastapi import FastAPI @@ -13,18 +12,8 @@ logging.basicConfig( ) log = logging.getLogger(__name__) - -@asynccontextmanager -async def lifespan(app: FastAPI): - log.info("Starting Melora") - await init_db() - await _ensure_thread_roots() - await start_presence() - log.info("Melora ready") - yield - log.info("Shutting down Melora") - await close_client() - await close_db() +app = FastAPI(title="Melora") +app.include_router(webhook_router) async def _ensure_thread_roots() -> None: @@ -38,8 +27,20 @@ async def _ensure_thread_roots() -> None: await set_thread_root(media_type, event_id) -app = FastAPI(title="Melora", lifespan=lifespan) -app.include_router(webhook_router) +@app.on_event("startup") +async def startup() -> None: + log.info("Starting Melora") + await init_db() + await _ensure_thread_roots() + await start_presence() + log.info("Melora ready") + + +@app.on_event("shutdown") +async def shutdown() -> None: + log.info("Shutting down Melora") + await close_client() + await close_db() @app.get("/health")