跳到主要内容

部署到 Vercel

本指南将引导你完成设置和部署使用 Prisma 到 Vercel 的无服务器应用程序的步骤。

Vercel 是一个云平台,用于托管静态站点、无服务器函数和边缘函数。你可以将 Vercel 项目与 GitHub 仓库集成,以便在提交新更改时自动部署。

我们创建了一个使用 Next.js 的 示例应用程序,你可以在使用 Prisma 部署应用程序到 Vercel 时将其作为参考。

虽然我们的示例使用 Next.js,但你可以将其他应用程序部署到 Vercel。请参阅 将 Express 与 Vercel 结合使用Vercel 上的 Nuxt,作为其他选项的示例。

构建配置

在 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

连接池

当你使用函数即服务提供商(如 Vercel 无服务器函数)时,每次调用都可能导致与数据库建立新连接。这可能导致你的数据库快速耗尽打开的连接并导致你的应用程序停滞。因此,连接池对于你的数据库至关重要。

你可以使用 Accelerate 进行连接池,以减小你的 Prisma Client 包大小并避免冷启动。

有关无服务器环境的连接管理的更多信息,请参阅我们的 连接管理指南