From e5b23b8a7ca9fc1ba2f11bce6e80811f86e517a9 Mon Sep 17 00:00:00 2001 From: Kato Hiroki Date: Sun, 2 Feb 2025 06:17:38 +0000 Subject: [PATCH] :bug: Try to fix "Max client connections reached" errors using transaction mode (#1669) --- .devcontainer/devcontainer.json | 3 ++- .github/workflows/ci.yml | 2 ++ compose.yaml | 7 ++++--- prisma/schema.prisma | 11 +++++++---- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 019e5a49a..ca9edd849 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -13,7 +13,8 @@ // Use 'forwardPorts' to make a list of ports inside the container available locally. "forwardPorts": [ 5173, - 5432 // for postgres + 5432, // for postgres + 6543 // for postgres ], // "shutdownAction": "none", // diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fb887c91f..a1daaaf88 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -94,6 +94,7 @@ jobs: run: pnpm dlx prisma migrate deploy env: DATABASE_URL: ${{ secrets.PREVIEW_DATABASE_URL }} + DIRECT_URL: ${{ secrets.PREVIEW_DIRECT_URL }} - name: Pull Vercel Environment Information run: pnpm vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} @@ -140,6 +141,7 @@ jobs: run: pnpm dlx prisma migrate deploy env: DATABASE_URL: ${{ secrets.PRODUCTION_DATABASE_URL }} + DIRECT_URL: ${{ secrets.PRODUCTION_DIRECT_URL }} - name: Pull Vercel Environment Information run: pnpm vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }} diff --git a/compose.yaml b/compose.yaml index 06cb3e83c..6feeb83e4 100644 --- a/compose.yaml +++ b/compose.yaml @@ -2,14 +2,15 @@ services: web: build: . ports: - - 5173:5173 + - '5173:5173' tty: true volumes: - .:/usr/src/app:cached - ./node_modules:/usr/src/app/node_modules:cached environment: - NODE_ENV=development - - DATABASE_URL=postgresql://db_user:db_password@db:5432/test_db + - DATABASE_URL=postgresql://db_user:db_password@db:5432/test_db?pgbouncer=true&connection_limit=10&connect_timeout=60&statement_timeout=60000 # Note: Local server cannot start if port is set to db:6543. + - DIRECT_URL=postgresql://db_user:db_password@db:5432/test_db command: sleep infinity depends_on: - db @@ -25,7 +26,7 @@ services: POSTGRES_DB: test_db POSTGRES_INITDB_ARGS: '--encoding=UTF8' ports: - - 5432:5432 + - '6543:5432' volumes: postgres-data: diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 42a7d0f85..e90c6d601 100755 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -3,9 +3,11 @@ // See: // https://www.prisma.io/docs/concepts/components/prisma-schema/generators +// https://www.prisma.io/docs/orm/prisma-client/deployment/edge/deploy-to-vercel generator client { - provider = "prisma-client-js" - binaryTargets = ["native", "rhel-openssl-3.0.x"] + provider = "prisma-client-js" + binaryTargets = ["native", "rhel-openssl-3.0.x"] + previewFeatures = ["driverAdapters"] } // See: @@ -26,8 +28,9 @@ generator fabbrica { } datasource db { - provider = "postgresql" - url = env("DATABASE_URL") + provider = "postgresql" + url = env("DATABASE_URL") + directUrl = env("DIRECT_URL") } // Note: Lucia v3 + v3 Prisma adaperでは、全てのフィールドがキャメルケースであることが要求されている。