跳到主要內容

部署到 Vercel

本指南將帶您完成設定和部署使用 Prisma 至 Vercel 的無伺服器應用程式的步驟。

Vercel 是一個雲端平台,託管靜態網站、無伺服器和邊緣函式。您可以將 Vercel 專案與 GitHub 儲存庫整合,以便在您進行新的提交時自動部署。

我們建立了一個使用 Next.js 的範例應用程式,您可以在將使用 Prisma 的應用程式部署到 Vercel 時作為參考。

雖然我們的範例使用 Next.js,但您可以將其他應用程式部署到 Vercel。請參閱 「Using Express with Vercel」「Nuxt on Vercel」 作為其他選項的範例。

建置配置

在 Vercel 建置期間更新 Prisma Client

Vercel 會在部署時自動快取依賴項。對於大多數應用程式,這不會造成任何問題。但是,對於 Prisma ORM,當您的 Prisma schema 發生變更時,可能會導致 Prisma Client 版本過舊。為了避免這個問題,請將 prisma generate 新增到應用程式的 postinstall 指令碼中

package.json
{
...
"scripts" {
"postinstall": "prisma generate"
}
...
}

這將在建置時重新產生 Prisma Client,以便您的部署始終擁有最新的用戶端。

資訊

如果您在部署到 Vercel 期間看到 prisma: command not found 錯誤,則表示您的依賴項中缺少 prisma。預設情況下,prisma 是開發依賴項,可能需要將其移至標準依賴項。

避免 Prisma Client 過舊的另一個選項是使用自訂輸出路徑,並將您的用戶端簽入版本控制。這樣,每次部署都保證包含正確的 Prisma Client。

schema.prisma
generator client {
provider = "prisma-client-js"
output = "./generated/client"
}

CI/CD 工作流程

在更複雜的 CI/CD 環境中,您可能還需要使用您在本機開發期間執行的任何遷移來更新資料庫 schema。您可以使用 prisma migrate deploy 命令來執行此操作。

在這種情況下,您可以在 package.json 中建立自訂建置命令(例如,稱為 vercel-build),如下所示

package.json
{
...
"scripts" {
"vercel-build": "prisma generate && prisma migrate deploy && next build",
}
...
}

您可以使用以下命令在 CI/CD 管道內調用此指令碼

npm run vercel-build

為預覽部署新增獨立的資料庫

預設情況下,您的應用程式將擁有與儲存庫的 main git 分支關聯的單一生產環境。如果您開啟提取請求以變更您的應用程式,Vercel 會建立新的預覽環境。

Vercel 對於生產和預覽環境都使用您在匯入專案時定義的 DATABASE_URL 環境變數。如果您建立包含資料庫 schema 遷移的提取請求,則會導致問題,因為提取請求將變更生產資料庫的 schema。

為了防止這種情況,請使用第二個託管資料庫來處理預覽部署。取得該連線字串後,您可以使用 Vercel 儀表板為預覽環境新增 DATABASE_URL

  1. 點擊您的 Vercel 專案的「Settings」(設定)標籤。

  2. 點擊「Environment variables」(環境變數)。

  3. 新增一個環境變數,金鑰為 DATABASE_URL,並且僅選取「Preview」(預覽)環境選項

    Add an environment variable for the preview environment

  4. 將值設定為第二個資料庫的連線字串

    postgresql://dbUsername:dbPassword@myhost:5432/mydb
  5. 點擊「Save」(儲存)。

連線池

當您使用 Function-as-a-Service 提供者(例如 Vercel 無伺服器函式)時,每次調用都可能導致與資料庫建立新的連線。這可能會導致您的資料庫快速耗盡開啟的連線,並導致您的應用程式停滯。因此,建立資料庫連線池至關重要。

您可以使用 Accelerate 來進行連線池,以減少 Prisma Client 套件大小並避免冷啟動。

有關無伺服器環境的連線管理的更多資訊,請參閱我們的連線管理指南