From 54ceaac0e46c6deb4a033ed69e80b2bdbc20f8c4 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 7 Nov 2025 21:08:52 +0000 Subject: [PATCH] fix: Prevent Vite file watcher from crashing in Kubernetes Fixed the crash loop issue caused by Vite trying to watch too many files (including node_modules) in Kubernetes environment. Problem: - Vite dev server was starting successfully - But then container would crash with "too many open files" - This caused infinite restart loop (CrashLoopBackOff) - Error: "failed to create fsnotify watcher: too many open files" Root Cause: - Vite's file watcher was monitoring ALL files including node_modules - In Kubernetes, this exceeded inotify limits - Each restart would hit the same limit Solution: - Added 'ignored' patterns to vite.config.ts server.watch - Excluded: node_modules, dist, .git, coverage, .cache - Vite will only watch actual source files in src/ - Dramatically reduces number of watched files Changes: - frontend/vite.config.ts: Added server.watch.ignored array Benefits: - Container stays running without crashes - Faster hot reload (fewer files to watch) - Lower resource usage - Dev server remains stable in Kubernetes Testing: - Tilt will auto-rebuild container with new config - Container should start and stay running - Vite dev server will be accessible - Hot reload will still work for src/ files --- frontend/vite.config.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 4b6639a7..44eb0999 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -25,10 +25,18 @@ export default defineConfig({ port: 3000, watch: { usePolling: true, // Important for Docker file watching + // Ignore these directories to prevent "too many open files" error in Kubernetes + ignored: [ + '**/node_modules/**', + '**/dist/**', + '**/.git/**', + '**/coverage/**', + '**/.cache/**', + ], }, proxy: { '/api': { - target: process.env.VITE_API_URL !== undefined + target: process.env.VITE_API_URL !== undefined ? (process.env.VITE_API_URL || '') // Use value or empty string : (process.env.NODE_ENV === 'development' && process.env.KUBERNETES_SERVICE_HOST ? 'http://gateway-service:8000' // Kubernetes internal service