From 2659a48e4ef4c0c6e54c8fc85085e64f852d1116 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Sat, 16 Aug 2025 13:57:49 +0000 Subject: [PATCH] Refine database connections and handle potential errors during startup Adjust the database connection logic to better distinguish between production and development environments, specifically addressing potential issues with PostgreSQL and Neon connections to prevent startup failures and improve error handling. Replit-Commit-Author: Agent Replit-Commit-Session-Id: e437ffed-c31b-44eb-9fd5-b6f9faa8e7ce Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/e437ffed-c31b-44eb-9fd5-b6f9faa8e7ce/zIqUatC --- ...tings-New--1755352580023_1755352580023.txt | 238 ++++++++++++++++++ server/db.ts | 38 ++- 2 files changed, 265 insertions(+), 11 deletions(-) create mode 100644 attached_assets/Pasted--User-related-Environment-related-Registries-Logs-Notifications-Settings-New--1755352580023_1755352580023.txt diff --git a/attached_assets/Pasted--User-related-Environment-related-Registries-Logs-Notifications-Settings-New--1755352580023_1755352580023.txt b/attached_assets/Pasted--User-related-Environment-related-Registries-Logs-Notifications-Settings-New--1755352580023_1755352580023.txt new file mode 100644 index 0000000..92618cf --- /dev/null +++ b/attached_assets/Pasted--User-related-Environment-related-Registries-Logs-Notifications-Settings-New--1755352580023_1755352580023.txt @@ -0,0 +1,238 @@ + + +User-related + + +Environment-related + +Registries + +Logs + +Notifications + +Settings + +New version available 2.27.9 +DismissSee what's new +Community Edition +2.27.6 LTS +Containers>logiflow-logiflow-1>Logs +Container logs + + +admin +Log viewer settings +Auto-refresh logs +Wrap lines +Display timestamps +Fetch +All logs +Search +Filter... +Lines +100 +Actions + + + + + at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7) + + at file:///app/dist/index.js:4874:7 + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + + at next (/app/node_modules/express/lib/router/route.js:149:13) + + at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3) + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + +} + +POST /api/login 500 in 2ms + +TypeError: Cannot read properties of null (reading 'select') + + at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33) + + at Strategy._verify (file:///app/dist/index.js:4832:38) + + at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12) + + at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16) + + at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7) + + at file:///app/dist/index.js:4874:7 + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + + at next (/app/node_modules/express/lib/router/route.js:149:13) + + at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3) + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + +Server error: { + + status: 500, + + message: "Cannot read properties of null (reading 'select')", + + error: TypeError: Cannot read properties of null (reading 'select') + + at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33) + + at Strategy._verify (file:///app/dist/index.js:4832:38) + + at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12) + + at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16) + + at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7) + + at file:///app/dist/index.js:4874:7 + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + + at next (/app/node_modules/express/lib/router/route.js:149:13) + + at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3) + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + +} + +POST /api/login 500 in 2ms + +TypeError: Cannot read properties of null (reading 'select') + + at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33) + + at Strategy._verify (file:///app/dist/index.js:4832:38) + + at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12) + + at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16) + + at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7) + + at file:///app/dist/index.js:4874:7 + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + + at next (/app/node_modules/express/lib/router/route.js:149:13) + + at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3) + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + +Server error: { + + status: 500, + + message: "Cannot read properties of null (reading 'select')", + + error: TypeError: Cannot read properties of null (reading 'select') + + at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33) + + at Strategy._verify (file:///app/dist/index.js:4832:38) + + at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12) + + at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16) + + at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7) + + at file:///app/dist/index.js:4874:7 + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + + at next (/app/node_modules/express/lib/router/route.js:149:13) + + at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3) + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + +} + +POST /api/login 500 in 2ms + +TypeError: Cannot read properties of null (reading 'select') + + at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33) + + at Strategy._verify (file:///app/dist/index.js:4832:38) + + at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12) + + at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16) + + at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7) + + at file:///app/dist/index.js:4874:7 + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + + at next (/app/node_modules/express/lib/router/route.js:149:13) + + at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3) + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + +Server error: { + + status: 500, + + message: "Cannot read properties of null (reading 'select')", + + error: TypeError: Cannot read properties of null (reading 'select') + + at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33) + + at Strategy._verify (file:///app/dist/index.js:4832:38) + + at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12) + + at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16) + + at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7) + + at file:///app/dist/index.js:4874:7 + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + + at next (/app/node_modules/express/lib/router/route.js:149:13) + + at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3) + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + +} + +POST /api/login 500 in 2ms + +TypeError: Cannot read properties of null (reading 'select') + + at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33) + + at Strategy._verify (file:///app/dist/index.js:4832:38) + + at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12) + + at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16) + + at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7) + + at file:///app/dist/index.js:4874:7 + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) + + at next (/app/node_modules/express/lib/router/route.js:149:13) + + at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3) + + at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5) \ No newline at end of file diff --git a/server/db.ts b/server/db.ts index aa22022..9a8e4c7 100644 --- a/server/db.ts +++ b/server/db.ts @@ -14,15 +14,15 @@ console.log('🔗 Database initialization:', { let db: any; let pool: any; -if (dbUrl && (isProduction || process.env.FORCE_POSTGRES === 'true')) { - // Use PostgreSQL for production or when forced - console.log('🐘 Using PostgreSQL database'); +if (isProduction && dbUrl && (dbUrl.includes('logiflow-db') || dbUrl.includes('localhost') || dbUrl.includes('127.0.0.1'))) { + // Standard PostgreSQL for production Docker + console.log('🐳 PRODUCTION: Using standard PostgreSQL'); const { Pool } = await import('pg'); const { drizzle } = await import('drizzle-orm/node-postgres'); pool = new Pool({ connectionString: dbUrl, - ssl: dbUrl.includes('localhost') ? false : { rejectUnauthorized: false }, + ssl: false, max: 10, idleTimeoutMillis: 30000, connectionTimeoutMillis: 5000, @@ -38,15 +38,31 @@ if (dbUrl && (isProduction || process.env.FORCE_POSTGRES === 'true')) { }); } catch (error) { console.error('❌ PostgreSQL connection test failed:', error); - // Continue anyway, will use MemStorage as fallback - pool = null; - db = null; } } else { - // Development fallback: use MemStorage - console.log('🔧 DEV: Using MemStorage (development fallback)'); - pool = null; - db = null; + // Fallback: use Neon for development (but will be overridden by MemStorage) + console.log('🔧 DEV: Using Neon (fallback, will use MemStorage)'); + const { Pool, neonConfig } = await import('@neondatabase/serverless'); + const { drizzle } = await import('drizzle-orm/neon-serverless'); + const ws = await import('ws'); + + neonConfig.webSocketConstructor = ws.default; + + if (dbUrl) { + try { + pool = new Pool({ connectionString: dbUrl }); + db = drizzle({ client: pool, schema }); + } catch (error) { + console.error('❌ Neon connection failed, will use MemStorage:', error); + pool = null; + db = null; + } + } else { + // Create dummy instances for development + pool = null; + db = null; + console.log('🔧 DEV: No DATABASE_URL, using MemStorage'); + } } export { db, pool }; \ No newline at end of file