fix(deploy): corriger la race condition sur le cache prod au déploiement #43

Merged
colgora merged 2 commits from fix/deploy-cache-race-condition into main 2026-03-27 14:29:07 +01:00
2 changed files with 7 additions and 7 deletions

View File

@@ -116,14 +116,13 @@ task('webpack_encore:build', function () {
sh -c '$installCmd'"); sh -c '$installCmd'");
}); });
// Restart Docker containers (entrypoint gère les migrations automatiquement) // Restart Docker containers (entrypoint gère migrations + cache:warmup automatiquement)
// Le cache:clear est fait APRÈS le restart : Docker résout le bind mount au démarrage // Le cache est regénéré par l'entrypoint AVANT que FrankenPHP ne démarre,
// du container, pas dynamiquement. Avant restart, docker exec voit encore l'ancienne release. // ce qui évite la race condition entre FrankenPHP et un docker exec concurrent.
desc('Restart Docker containers'); desc('Restart Docker containers');
task('docker:restart', function () { task('docker:restart', function () {
run('docker restart mangarr-worker-commands mangarr-worker-events mangarr-worker-scheduler'); run('docker restart mangarr-worker-commands mangarr-worker-events mangarr-worker-scheduler');
run('docker restart mangarr'); 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 // Pas de PHP sur l'hôte : désactiver les tâches Symfony qui en ont besoin

View File

@@ -53,11 +53,12 @@ if [ "$1" = 'frankenphp' ] || [ "$1" = 'php' ] || [ "$1" = 'bin/console' ]; then
fi fi
fi fi
# Vider le cache prod stale avant le démarrage des workers FrankenPHP. # Vider le cache prod stale et le regénérer AVANT le démarrage de FrankenPHP.
# Sans ça, les workers chargent l'ancien cache du volume Docker et crashent # Sans ça, FrankenPHP et le deploy script compilent le container DI en parallèle
# en boucle si les classes du cache ne correspondent plus à la version déployée. # → fichiers partiellement écrits → crash au démarrage des workers.
if [ "$APP_ENV" = "prod" ]; then if [ "$APP_ENV" = "prod" ]; then
rm -rf var/cache/prod rm -rf var/cache/prod
php bin/console cache:warmup --env=prod
fi fi
setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX var setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX var