From c9e7e50bf48ba1d9d11c73f377f7c1e5855c5b5f Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 2 May 2026 10:36:13 +0200 Subject: [PATCH] Fix: Staging MEDIA_DIR=/prod-media direkt (kein Symlink-Umweg), SW by-v603 --- backend/main.py | 20 +------------------- backend/static/js/app.js | 2 +- backend/static/sw.js | 2 +- docker-compose.staging.yml | 3 +-- 4 files changed, 4 insertions(+), 23 deletions(-) diff --git a/backend/main.py b/backend/main.py index 5cf7e95..8b259f7 100644 --- a/backend/main.py +++ b/backend/main.py @@ -48,7 +48,6 @@ async def lifespan(app: FastAPI): init_db() from routes.movies import seed_movies seed_movies() - _link_prod_media() logger.info(f"KI-Modus: {ki.KI_MODE}") sched.start() yield @@ -280,27 +279,10 @@ app.mount("/icons", StaticFiles(directory=f"{STATIC_DIR}/icons"), name="icons") app.mount("/img", StaticFiles(directory=f"{STATIC_DIR}/img"), name="img") # User-generierte Medien (Fotos aus Tagebuch, Giftköder-Alarm, etc.) -MEDIA_DIR = os.getenv("MEDIA_DIR", "/data/media") -PROD_MEDIA_DIR = os.getenv("PROD_MEDIA_DIR", "") # Staging-only: Production-Media einlinken +MEDIA_DIR = os.getenv("MEDIA_DIR", "/data/media") os.makedirs(MEDIA_DIR, exist_ok=True) app.mount("/media", StaticFiles(directory=MEDIA_DIR), name="media") - -def _link_prod_media(): - """Staging: symlinkt Production-Media-Verzeichnisse in das Staging-Media-Verzeichnis.""" - if not PROD_MEDIA_DIR or not os.path.isdir(PROD_MEDIA_DIR): - return - import pathlib - staging = pathlib.Path(MEDIA_DIR) - for item in pathlib.Path(PROD_MEDIA_DIR).iterdir(): - link = staging / item.name - if not link.exists() and not link.is_symlink(): - try: - link.symlink_to(item) - logger.info(f"Prod-Media verlinkt: {link} → {item}") - except OSError as e: - logger.warning(f"Symlink fehlgeschlagen {link}: {e}") - @app.get("/robots.txt") async def robots(): return FileResponse(f"{STATIC_DIR}/robots.txt", media_type="text/plain") diff --git a/backend/static/js/app.js b/backend/static/js/app.js index 5669df1..9a733f8 100644 --- a/backend/static/js/app.js +++ b/backend/static/js/app.js @@ -3,7 +3,7 @@ Router, State-Management, Navigation, Initialisierung. ============================================================ */ -const APP_VER = '602'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '603'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const APP_VERSION = '1.2.1'; // ← semantische Version, wird bei make release gesetzt const IS_STAGING = location.hostname === 'staging.banyaro.app'; diff --git a/backend/static/sw.js b/backend/static/sw.js index 5d090c4..7491ee3 100644 --- a/backend/static/sw.js +++ b/backend/static/sw.js @@ -3,7 +3,7 @@ Offline-Cache + Push Notifications + Tile-Cache ============================================================ */ -const CACHE_VERSION = 'by-v602'; +const CACHE_VERSION = 'by-v603'; const CACHE_STATIC = `${CACHE_VERSION}-static`; const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache diff --git a/docker-compose.staging.yml b/docker-compose.staging.yml index 610c0e2..800d3f0 100644 --- a/docker-compose.staging.yml +++ b/docker-compose.staging.yml @@ -12,8 +12,7 @@ services: - .env environment: - DB_PATH=/data/banyaro.db - - MEDIA_DIR=/data/media - - PROD_MEDIA_DIR=/prod-media + - MEDIA_DIR=/prod-media - STAGING=true - VAPID_PUBLIC_KEY=BMKbFAmpsqJ-eFef_4XJcYpuxPWqBNAoy9buMNnMSa6ijcPzltboHi_YccPKJrUD0isBez-vJIzAgjnLTWkzcC0 - VAPID_PRIVATE_KEY=8PWa9vvwMqtqsJEJGcwmiLhR0_Yl7duVX3wmWiKS878