From 444a1b9dcca5b5304b563b9b0883a5f1f32c3d5e Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Sat, 14 Feb 2026 16:22:22 +0100 Subject: [PATCH] =?UTF-8?q?Verbessere=20die=20Handhabung=20des=20Ladens=20?= =?UTF-8?q?von=20.env-Dateien:=20F=C3=BCge=20Lesbarkeitspr=C3=BCfung=20f?= =?UTF-8?q?=C3=BCr=20Produktions-.env=20hinzu=20und=20verbessere=20Fehlerb?= =?UTF-8?q?ehandlung=20beim=20Laden.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/config/loadEnv.js | 52 +++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/backend/config/loadEnv.js b/backend/config/loadEnv.js index 70b10b0..924df09 100644 --- a/backend/config/loadEnv.js +++ b/backend/config/loadEnv.js @@ -12,25 +12,51 @@ const productionEnvPath = '/opt/yourpart/backend/.env'; const localEnvPath = path.resolve(__dirname, '../.env'); let envPath = localEnvPath; // Fallback +let usingProduction = false; if (fs.existsSync(productionEnvPath)) { - envPath = productionEnvPath; - console.log('[env] Lade Produktions-.env:', productionEnvPath); + // Prüfe Lesbarkeit bevor wir versuchen, sie zu laden + try { + fs.accessSync(productionEnvPath, fs.constants.R_OK); + envPath = productionEnvPath; + usingProduction = true; + console.log('[env] Produktions-.env gefunden und lesbar:', productionEnvPath); + } catch (err) { + console.warn('[env] Produktions-.env vorhanden, aber nicht lesbar - verwende lokale .env stattdessen:', productionEnvPath); + console.warn('[env] Fehler:', err && err.message); + envPath = localEnvPath; + } } else { - console.log('[env] Lade lokale .env:', localEnvPath); + console.log('[env] Produktions-.env nicht gefunden, lade lokale .env:', localEnvPath); } -// Lade .env-Datei +// Lade .env-Datei (robust gegen Fehler) console.log('[env] Versuche .env zu laden von:', envPath); console.log('[env] Datei existiert:', fs.existsSync(envPath)); -console.log('[env] Datei lesbar:', fs.accessSync ? (() => { try { fs.accessSync(envPath, fs.constants.R_OK); return true; } catch { return false; } })() : 'unbekannt'); - -const result = dotenv.config({ path: envPath }); -if (result.error) { - console.warn('[env] Konnte .env nicht laden:', result.error.message); - console.warn('[env] Fehler-Details:', result.error); -} else { - console.log('[env] .env erfolgreich geladen von:', envPath); - console.log('[env] Geladene Variablen:', Object.keys(result.parsed || {})); +let result; +try { + result = dotenv.config({ path: envPath }); + if (result.error) { + console.warn('[env] Konnte .env nicht laden:', result.error.message); + console.warn('[env] Fehler-Details:', result.error); + } else { + console.log('[env] .env erfolgreich geladen von:', envPath, usingProduction ? '(production)' : '(local)'); + console.log('[env] Geladene Variablen:', Object.keys(result.parsed || {})); + } +} catch (err) { + // Sollte nicht passieren, aber falls dotenv intern eine Exception wirft (z.B. EACCES), fange sie ab + console.warn('[env] Unerwarteter Fehler beim Laden der .env:', err && err.message); + console.warn('[env] Stack:', err && err.stack); + if (envPath !== localEnvPath && fs.existsSync(localEnvPath)) { + console.log('[env] Versuche stattdessen lokale .env:', localEnvPath); + try { + result = dotenv.config({ path: localEnvPath }); + if (!result.error) { + console.log('[env] Lokale .env erfolgreich geladen von:', localEnvPath); + } + } catch (err2) { + console.warn('[env] Konnte lokale .env auch nicht laden:', err2 && err2.message); + } + } } // Debug: Zeige Redis-Konfiguration