From 7b6cfaa5c23ad69fefd3d0ee35ef4784646136b8 Mon Sep 17 00:00:00 2001 From: Vadym Samoilenko Date: Mon, 23 Feb 2026 22:01:00 +0000 Subject: [PATCH] fix: wrap generateStaticParams in try/catch to survive build without DB During Docker build the `db` host doesn't exist in the build network, so any attempt to query Postgres in generateStaticParams fails. With the try/catch, blog pages fall back to [] (rendered on demand) and service pages fall back to hardcoded SERVICES_FALLBACK slugs so static pages are still pre-generated even without a live DB. Co-Authored-By: Claude Sonnet 4.6 --- src/app/(site)/blog/[slug]/page.tsx | 9 +++++++-- src/app/(site)/services/[slug]/page.tsx | 13 +++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/app/(site)/blog/[slug]/page.tsx b/src/app/(site)/blog/[slug]/page.tsx index ceefaf1..61ea6a7 100644 --- a/src/app/(site)/blog/[slug]/page.tsx +++ b/src/app/(site)/blog/[slug]/page.tsx @@ -29,8 +29,13 @@ function formatDate(iso: string | null | undefined): string { } export async function generateStaticParams() { - const posts = await getPublishedPosts(100); - return posts.map((p) => ({ slug: p.slug })); + try { + const posts = await getPublishedPosts(100); + return posts.map((p) => ({ slug: p.slug })); + } catch { + // DB unavailable at build time (no `db` host in Docker build network) — pages render on demand + return []; + } } export async function generateMetadata({ diff --git a/src/app/(site)/services/[slug]/page.tsx b/src/app/(site)/services/[slug]/page.tsx index 1a78974..f3b068b 100644 --- a/src/app/(site)/services/[slug]/page.tsx +++ b/src/app/(site)/services/[slug]/page.tsx @@ -214,10 +214,15 @@ const SERVICES_FALLBACK: Record = { }; export async function generateStaticParams() { - const services = await getPublishedServices(100); - const cmsSlugSet = new Set(services.map((s) => s.slug)); - const fallbackSlugs = Object.keys(SERVICES_FALLBACK).filter((s) => !cmsSlugSet.has(s)); - return [...services.map((s) => ({ slug: s.slug })), ...fallbackSlugs.map((s) => ({ slug: s }))]; + try { + const services = await getPublishedServices(100); + const cmsSlugSet = new Set(services.map((s) => s.slug)); + const fallbackSlugs = Object.keys(SERVICES_FALLBACK).filter((s) => !cmsSlugSet.has(s)); + return [...services.map((s) => ({ slug: s.slug })), ...fallbackSlugs.map((s) => ({ slug: s }))]; + } catch { + // DB unavailable at build time — pre-render fallback slugs only; CMS pages render on demand + return Object.keys(SERVICES_FALLBACK).map((s) => ({ slug: s })); + } } export async function generateMetadata({