diff --git a/backend/src/routes/admin.js b/backend/src/routes/admin.js index 5f90782..f8df0bd 100644 --- a/backend/src/routes/admin.js +++ b/backend/src/routes/admin.js @@ -686,11 +686,19 @@ router.delete('/exports/:filename', (req, res, next) => { * 2. Copie les assets (logos, icons, documents) immédiatement * 3. Écrit la nouvelle DB dans {DB_PATH}.pending-restore * 4. Répond au client, puis redémarre le processus (process.exit) - * → En prod (DATA_DIR défini), le restart policy Docker relance le conteneur + * → En prod (NODE_ENV=production), le restart policy Docker relance le conteneur * qui applique le pending-restore au démarrage. - * → En local (DATA_DIR absent), aucun superviseur (node --watch / nodemon) - * ne relance automatiquement le process après un exit propre : on - * respawn nous-mêmes un process enfant détaché avant de quitter. + * → En local (NODE_ENV≠production — dev nodemon, ou tout environnement qui ne + * se déclare pas explicitement "production"), aucun superviseur externe ne + * relance automatiquement le process après un exit propre (nodemon n'auto- + * restart que sur changement de fichier) : on respawn nous-mêmes un process + * enfant détaché avant de quitter. NB (19/09/26, bug signalé par Olivier : + * "j'ai restauré, ça ne marche pas sans relancer le serveur à la main") : + * le signal utilisé ici était auparavant la présence de DATA_DIR, qui n'est + * PAS un indicateur fiable de "on tourne sous Docker avec restart policy" — + * le .env de dev local définit lui aussi DATA_DIR (pour organiser où vivent + * les données), donc la condition ne se déclenchait jamais en dev et le + * process restait mort jusqu'à un redémarrage manuel. */ router.post('/exports/:filename/restore', async (req, res, next) => { const tmpDb = path.join(os.tmpdir(), `cl-pre-restore-${Date.now()}.db`); @@ -794,11 +802,14 @@ router.post('/exports/:filename/restore', async (req, res, next) => { // 4. Réponse puis redémarrage res.json({ ok: true, backup: `pre-restore-backup-${ts}.zip` }); setTimeout(() => { - if (!process.env.DATA_DIR) { - // Dev local : node --watch / nodemon n'auto-restart pas après un exit - // propre (process.exit(0)) — ils attendent un changement de fichier. - // On relance donc nous-mêmes un process enfant détaché avant de quitter, - // qui appliquera le .pending-restore à son démarrage (voir db/index.js). + if (process.env.NODE_ENV !== 'production') { + // Dev local (ou tout NODE_ENV non explicitement "production") : node --watch / + // nodemon n'auto-restart pas après un exit propre (process.exit(0)) — ils + // attendent un changement de fichier. On relance donc nous-mêmes un process + // enfant détaché avant de quitter, qui appliquera le .pending-restore à son + // démarrage (voir db/index.js). Anciennement conditionné à `!process.env.DATA_DIR`, + // qui ne détectait pas fiablement l'environnement (cf. commentaire de la route + // ci-dessus) — DATA_DIR est défini en dev local aussi. try { const child = spawn(process.execPath, [process.argv[1]], { cwd: process.cwd(),