mirror of
https://github.com/documenso/documenso.git
synced 2025-11-10 12:32:34 +10:00
## Description Fixes the issue with Vercel preview deployments failing. It appears that the old `PGHOST` environment variable injected by neon was: `ep-snowy-snowflake-a2vc5pa2.eu-central-1.aws.neon.tech` It is now: `ep-snowy-snowflake-a2vc5pa2.eu-central-1-pooler.aws.neon.tech` Notice the `-pooler` being attached automatically to the `PGHOST`. ## References > The following changes were made to the [Neon Vercel Integration](https://vercel.com/integrations/neon): > >To ensure that users accessing a Neon database from a serverless environment have enough connections, the DATABASE_URL and PGHOST environment variables added to a Vercel project by the Neon integration are now set to a pooled Neon connection string by default. Pooled connections support up to 10,000 simultaneous connections. Previously, these variables were set to an unpooled connection string supporting fewer concurrent connections. https://neon.tech/docs/changelog https://neon.tech/docs/guides/vercel#manage-vercel-environment-variables
49 lines
1.7 KiB
TypeScript
49 lines
1.7 KiB
TypeScript
/// <reference types="@documenso/tsconfig/process-env.d.ts" />
|
|
|
|
export const getDatabaseUrl = () => {
|
|
if (process.env.NEXT_PRIVATE_DATABASE_URL) {
|
|
return process.env.NEXT_PRIVATE_DATABASE_URL;
|
|
}
|
|
|
|
if (process.env.POSTGRES_URL) {
|
|
process.env.NEXT_PRIVATE_DATABASE_URL = process.env.POSTGRES_URL;
|
|
process.env.NEXT_PRIVATE_DIRECT_DATABASE_URL = process.env.POSTGRES_URL;
|
|
}
|
|
|
|
if (process.env.DATABASE_URL) {
|
|
process.env.NEXT_PRIVATE_DATABASE_URL = process.env.DATABASE_URL;
|
|
process.env.NEXT_PRIVATE_DIRECT_DATABASE_URL = process.env.DATABASE_URL;
|
|
}
|
|
|
|
if (process.env.DATABASE_URL_UNPOOLED) {
|
|
process.env.NEXT_PRIVATE_DIRECT_DATABASE_URL = process.env.DATABASE_URL_UNPOOLED;
|
|
}
|
|
|
|
if (process.env.POSTGRES_PRISMA_URL) {
|
|
process.env.NEXT_PRIVATE_DATABASE_URL = process.env.POSTGRES_PRISMA_URL;
|
|
}
|
|
|
|
if (process.env.POSTGRES_URL_NON_POOLING) {
|
|
process.env.NEXT_PRIVATE_DIRECT_DATABASE_URL = process.env.POSTGRES_URL_NON_POOLING;
|
|
}
|
|
|
|
// If we don't have a database URL, we can't normalize it.
|
|
if (!process.env.NEXT_PRIVATE_DATABASE_URL) {
|
|
return undefined;
|
|
}
|
|
|
|
// We change the protocol from `postgres:` to `https:` so we can construct a easily
|
|
// mofifiable URL.
|
|
const url = new URL(process.env.NEXT_PRIVATE_DATABASE_URL.replace('postgres://', 'https://'));
|
|
|
|
// If we're using a connection pool, we need to let Prisma know that
|
|
// we're using PgBouncer.
|
|
if (process.env.NEXT_PRIVATE_DATABASE_URL !== process.env.NEXT_PRIVATE_DIRECT_DATABASE_URL) {
|
|
url.searchParams.set('pgbouncer', 'true');
|
|
|
|
process.env.NEXT_PRIVATE_DATABASE_URL = url.toString().replace('https://', 'postgres://');
|
|
}
|
|
|
|
return process.env.NEXT_PRIVATE_DATABASE_URL;
|
|
};
|