跳至主要内容

部署到 Vercel

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

Vercel 是一个云平台,托管静态站点、无服务器和边缘函数。您可以将 Vercel 项目与 GitHub 存储库集成,以便在您进行新的提交时自动部署。

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

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

构建配置

在 Vercel 构建期间更新 Prisma Client

Vercel 会在部署时自动缓存依赖项。对于大多数应用程序,这不会导致任何问题。但是,对于 Prisma ORM,它可能会导致在 Prisma 模式更改时 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 环境中,您可能还需要使用在本地开发期间执行的任何迁移来更新数据库模式。您可以使用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 环境变量来处理生产和预览环境。如果您使用数据库模式迁移创建拉取请求,这会导致问题,因为拉取请求将更改生产数据库的模式。

为防止这种情况,请使用第二个托管数据库来处理预览部署。获得该连接字符串后,您可以使用 Vercel 仪表板为预览环境添加 DATABASE_URL

  1. 单击 Vercel 项目的设置选项卡。

  2. 单击环境变量

  3. 添加一个环境变量,其键为 DATABASE_URL,并且仅选择预览环境选项

    Add an environment variable for the preview environment

  4. 将值设置为第二个数据库的连接字符串

    postgresql://dbUsername:dbPassword@myhost:5432/mydb
  5. 单击保存

连接池

当您使用 Function-as-a-Service 提供商(如 Vercel 无服务器函数)时,每次调用都可能导致与数据库的新连接。这会导致您的数据库很快用完打开的连接并导致您的应用程序停顿。因此,将连接池化到您的数据库至关重要。

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

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