Files
Epicnabbo-Catalogus-Updated…/src/lib/prisma.ts
T
SimoandCursor 77931db775 fix: cap Prisma pool during next build to stop deploy SSG timeouts
Next build workers were each opening up to DATABASE_POOL_SIZE connections and exhausting MySQL (pool active=0), hanging sitemap generation. Cap build pool to 5, fail connect faster, limit SSG concurrency, and make sitemap dynamic.

Co-authored-by: Cursor <[email protected]>
2026-07-21 21:28:27 +02:00

38 lines
1.4 KiB
TypeScript

import { PrismaMariaDb } from "@prisma/adapter-mariadb";
import { env } from "@/env";
import { PrismaClient } from "@/generated/prisma/client";
import { resolvePrismaConnectionLimit } from "@/lib/prisma-pool";
const globalForPrisma = globalThis as unknown as { prisma?: PrismaClient };
function createPrismaClient(): PrismaClient {
const url = new URL(env.DATABASE_URL);
const isBuild =
process.env.NEXT_PHASE === "phase-production-build" ||
process.env.NEXT_PHASE === "phase-production-compile";
const connectionLimit = resolvePrismaConnectionLimit(env.DATABASE_POOL_SIZE);
// Fail fast during SSG so Next can retry/fallback instead of hanging 30s+.
const connectTimeout = isBuild
? Math.min(env.DATABASE_CONNECT_TIMEOUT_MS, 5_000)
: env.DATABASE_CONNECT_TIMEOUT_MS;
const adapter = new PrismaMariaDb({
host: url.hostname,
port: Number(url.port) || 3306,
user: decodeURIComponent(url.username),
password: decodeURIComponent(url.password),
database: url.pathname.replace(/^\//, ""),
connectionLimit,
connectTimeout,
acquireTimeout: connectTimeout,
idleTimeout: env.DATABASE_IDLE_TIMEOUT_MS,
});
return new PrismaClient({
adapter,
log: env.NODE_ENV === "development" ? ["error", "warn"] : ["error"],
});
}
export const prisma = globalForPrisma.prisma ?? createPrismaClient();
if (env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;