Bâcher l'interface dans l'image complète aussi, repli inscriptible

- Le Dockerfile principal (worker, --serve, local-2m) n'avait pas l'étape
  de bake : le repli de webapp.py tentait d'écrire webapp_assets/ dans le
  paquet installé (dist-packages, propriété de root) et faisait planter
  l'import de la webapp sous l'utilisateur lidar.
- Même étape de bake que Dockerfile.webapp, avec cd /tmp pour cibler le
  paquet installé (sinon la copie source /app capte l'import via sys.path).
- Le repli de webapp.py ne casse plus l'import si le dossier du paquet
  n'est pas inscriptible : réécriture dans un répertoire temporaire.
This commit is contained in:
Antoine Jacquin
2026-09-17 07:46:14 +02:00
parent ac182da55e
commit a87d049ef6
2 changed files with 19 additions and 5 deletions

View File

@ -147,14 +147,20 @@ async def _log_client_ip(request: Request, call_next):
return await call_next(request)
# CSS/JS de l'interface : servis depuis l'IMAGE (bâchés au build, cf.
# Dockerfile.webapp), plus depuis le volume — le code de l'interface suit
# l'image, pas le cache de tuiles. En repli (dev, source non bâchée), on les
# régénère depuis les constantes de l'index pour que /assets soit actif même
# avant la première génération.
# Dockerfile / Dockerfile.webapp), plus depuis le volume — le code de
# l'interface suit l'image, pas le cache de tuiles. En repli (dev, source
# non bâchée), on les régénère depuis les constantes de l'index ; si le
# dossier du paquet n'est pas inscriptible (install système sans bake),
# repli dans un répertoire temporaire pour ne pas casser l'import.
_assets_dir = Path(__file__).resolve().parent / "webapp_assets"
if not (_assets_dir / "app.js").is_file():
from .index import _write_ui_assets
_write_ui_assets(_assets_dir)
try:
_write_ui_assets(_assets_dir)
except OSError:
import tempfile
_assets_dir = Path(tempfile.gettempdir()) / "lidar_webapp_assets"
_write_ui_assets(_assets_dir)
# --- Cache à la demande : la visualisation peuple le cache local -------------
# Les images viennent de la machine de traitement par HTTP : une image absente