From f47d1a245feed4b89a6c38cc42f13bc7bb4477ef Mon Sep 17 00:00:00 2001 From: "ext.jeremy.guillot@maxicoffee.domains" Date: Fri, 27 Mar 2026 14:28:30 +0100 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20corriger=20la=20race=20condition?= =?UTF-8?q?=20sur=20le=20cache=20prod=20au=20d=C3=A9ploiement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit L'entrypoint faisait rm -rf var/cache/prod puis lançait FrankenPHP. FrankenPHP compilait partiellement le container DI pendant que le script Deployer lançait aussi cache:clear → fichiers manquants → crash. - entrypoint.sh : ajouter cache:warmup après rm -rf, avant exec FrankenPHP (l'entrypoint est séquentiel, FrankenPHP ne démarre qu'une fois le cache prêt) - deploy.php : supprimer le docker exec cache:clear devenu inutile et dangereux --- deploy.php | 7 +++---- frankenphp/docker-entrypoint.sh | 7 ++++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/deploy.php b/deploy.php index a72efc5..f61ccd3 100644 --- a/deploy.php +++ b/deploy.php @@ -116,14 +116,13 @@ task('webpack_encore:build', function () { sh -c '$installCmd'"); }); -// Restart Docker containers (entrypoint gère les migrations automatiquement) -// Le cache:clear est fait APRÈS le restart : Docker résout le bind mount au démarrage -// du container, pas dynamiquement. Avant restart, docker exec voit encore l'ancienne release. +// Restart Docker containers (entrypoint gère migrations + cache:warmup automatiquement) +// Le cache est regénéré par l'entrypoint AVANT que FrankenPHP ne démarre, +// ce qui évite la race condition entre FrankenPHP et un docker exec concurrent. desc('Restart Docker containers'); task('docker:restart', function () { run('docker restart mangarr-worker-commands mangarr-worker-events mangarr-worker-scheduler'); run('docker restart mangarr'); - run('docker exec mangarr php bin/console cache:clear --env=prod'); }); // Pas de PHP sur l'hôte : désactiver les tâches Symfony qui en ont besoin diff --git a/frankenphp/docker-entrypoint.sh b/frankenphp/docker-entrypoint.sh index 907822c..f197e41 100755 --- a/frankenphp/docker-entrypoint.sh +++ b/frankenphp/docker-entrypoint.sh @@ -53,11 +53,12 @@ if [ "$1" = 'frankenphp' ] || [ "$1" = 'php' ] || [ "$1" = 'bin/console' ]; then fi fi - # Vider le cache prod stale avant le démarrage des workers FrankenPHP. - # Sans ça, les workers chargent l'ancien cache du volume Docker et crashent - # en boucle si les classes du cache ne correspondent plus à la version déployée. + # Vider le cache prod stale et le regénérer AVANT le démarrage de FrankenPHP. + # Sans ça, FrankenPHP et le deploy script compilent le container DI en parallèle + # → fichiers partiellement écrits → crash au démarrage des workers. if [ "$APP_ENV" = "prod" ]; then rm -rf var/cache/prod + php bin/console cache:warmup --env=prod fi setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX var -- 2.49.1