Fix lsur la restoration des sauvegardes
This commit is contained in:
1 parent
49fab06012
commit
a58a8460f7
1 file changed
+20
-9
@@ -686,11 +686,19 @@ router.delete('/exports/:filename', (req, res, next) => {
|
|||||||
* 2. Copie les assets (logos, icons, documents) immédiatement
|
* 2. Copie les assets (logos, icons, documents) immédiatement
|
||||||
* 3. Écrit la nouvelle DB dans {DB_PATH}.pending-restore
|
* 3. Écrit la nouvelle DB dans {DB_PATH}.pending-restore
|
||||||
* 4. Répond au client, puis redémarre le processus (process.exit)
|
* 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.
|
* qui applique le pending-restore au démarrage.
|
||||||
* → En local (DATA_DIR absent), aucun superviseur (node --watch / nodemon)
|
* → En local (NODE_ENV≠production — dev nodemon, ou tout environnement qui ne
|
||||||
* ne relance automatiquement le process après un exit propre : on
|
* se déclare pas explicitement "production"), aucun superviseur externe ne
|
||||||
* respawn nous-mêmes un process enfant détaché avant de quitter.
|
* 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) => {
|
router.post('/exports/:filename/restore', async (req, res, next) => {
|
||||||
const tmpDb = path.join(os.tmpdir(), `cl-pre-restore-${Date.now()}.db`);
|
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
|
// 4. Réponse puis redémarrage
|
||||||
res.json({ ok: true, backup: `pre-restore-backup-${ts}.zip` });
|
res.json({ ok: true, backup: `pre-restore-backup-${ts}.zip` });
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (!process.env.DATA_DIR) {
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
// Dev local : node --watch / nodemon n'auto-restart pas après un exit
|
// Dev local (ou tout NODE_ENV non explicitement "production") : node --watch /
|
||||||
// propre (process.exit(0)) — ils attendent un changement de fichier.
|
// nodemon n'auto-restart pas après un exit propre (process.exit(0)) — ils
|
||||||
// On relance donc nous-mêmes un process enfant détaché avant de quitter,
|
// attendent un changement de fichier. On relance donc nous-mêmes un process
|
||||||
// qui appliquera le .pending-restore à son démarrage (voir db/index.js).
|
// 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 {
|
try {
|
||||||
const child = spawn(process.execPath, [process.argv[1]], {
|
const child = spawn(process.execPath, [process.argv[1]], {
|
||||||
cwd: process.cwd(),
|
cwd: process.cwd(),
|
||||||
|
|||||||
Reference in new issue
Block a user