Fix Vercel build: force dynamic rendering, lazy db init, type fixes
This commit is contained in:
+26
-8
@@ -1,17 +1,35 @@
|
||||
import { drizzle } from 'drizzle-orm/neon-http';
|
||||
import { drizzle, NeonHttpDatabase } from 'drizzle-orm/neon-http';
|
||||
import { neon } from '@neondatabase/serverless';
|
||||
import * as schema from './schema';
|
||||
|
||||
// Create the Neon client (with fallback for UI testing)
|
||||
const sql = process.env.DATABASE_URL
|
||||
? neon(process.env.DATABASE_URL)
|
||||
: null;
|
||||
// Lazy initialization to prevent build-time crashes
|
||||
let _db: NeonHttpDatabase<typeof schema> | null = null;
|
||||
|
||||
// Create the Drizzle client
|
||||
export const db = sql ? drizzle(sql, { schema }) : null;
|
||||
export const db = new Proxy({} as NeonHttpDatabase<typeof schema>, {
|
||||
get: (target, prop) => {
|
||||
if (!_db) {
|
||||
if (!process.env.DATABASE_URL) {
|
||||
// Allow build to pass by returning a dummy if accessed during build
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
console.warn('Database accessed during build without DATABASE_URL. Returning dummy.');
|
||||
// We return a proxy that logs on any access to avoid hard crashes if possible,
|
||||
// but typically this path is creating the client.
|
||||
// Returning a dummy DB object that matches the shape is hard.
|
||||
// But if we throw, we crash.
|
||||
// The issue is verify the build doesn't crash on import.
|
||||
// If we are here, something ACCESSED db.
|
||||
}
|
||||
throw new Error('DATABASE_URL is not defined');
|
||||
}
|
||||
const sql = neon(process.env.DATABASE_URL);
|
||||
_db = drizzle(sql, { schema });
|
||||
}
|
||||
return Reflect.get(_db, prop);
|
||||
},
|
||||
});
|
||||
|
||||
// Helper to check if DB is available
|
||||
export const isDbAvailable = () => db !== null;
|
||||
export const isDbAvailable = () => !!process.env.DATABASE_URL;
|
||||
|
||||
// Export schema for use elsewhere
|
||||
export * from './schema';
|
||||
|
||||
Reference in New Issue
Block a user