跳至主要内容

部署到 Vercel

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

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

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

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

构建配置

在 Vercel 构建期间更新 Prisma 客户端

Vercel 会在部署时自动缓存依赖项。对于大多数应用程序,这不会造成任何问题。但是,对于 Prisma ORM,这可能会导致 Prisma 模式更改时 Prisma 客户端的版本过时。为避免此问题,将 prisma generate 添加到应用程序的 postinstall 脚本中

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

这将在构建时重新生成 Prisma 客户端,以确保您的部署始终具有最新的客户端。

信息

如果您在部署到 Vercel 期间看到 prisma: command not found 错误,则您的依赖项中缺少 prisma。默认情况下,prisma 是一个开发依赖项,可能需要将其移到标准依赖项。

避免使用过时的 Prisma 客户端的另一种选择是使用 自定义输出路径 并将您的客户端检入版本控制。这样,每次部署都保证包含正确的 Prisma 客户端。

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. 单击保存

连接池

当您使用诸如 Vercel 无服务器函数之类的函数即服务提供商时,每次调用都可能导致与您的数据库建立新的连接。这会导致您的数据库很快耗尽打开的连接,并导致您的应用程序停顿。出于这个原因,对数据库进行连接池至关重要。

您可以使用 加速 进行连接池,以减少 Prisma 客户端捆绑包大小,并避免冷启动。

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