部署到 Deno Deploy
通过本指南,您可以学习如何构建和部署一个简单的应用程序到Deno Deploy。该应用程序使用 Prisma ORM 将每个请求的日志保存到 PostgreSQL 数据库中。
本指南涵盖了 Prisma CLI 与 Deno CLI、Deno Deploy、Prisma Client 和 Prisma Accelerate 的使用。
本指南演示了如何将应用程序部署到 Deno Deploy 以及 PostgreSQL 数据库,但您可以使用Prisma ORM 支持的任何数据库类型。
先决条件
- 一个免费的账户
- 一个免费的 Deno Deploy 账户
- 一个 PostgreSQL 数据库
- 已安装 Node.js 和 npm
- 已安装 Deno v1.29.4 或更高版本。 了解更多。
- (推荐)最新版本的 Prisma ORM。
- (推荐)VS Code 的 Deno 扩展。 了解更多。
1. 设置你的应用程序
首先,你需要为你的项目创建一个目录,然后使用 deno run
初始化你的应用程序,使用 prisma init
作为带有 npm 说明符的 npm 包。
设置你的应用程序
-
打开你的终端并导航到一个你选择的路径。
-
运行以下命令来设置你的应用程序。
mkdir prisma-deno-deploy
cd prisma-deno-deploy
deno run -A npm:prisma init -
编辑
prisma/schema.prisma
文件来定义数据模型并启用deno
预览功能标记。在指南的后面,你将创建一个使用
Log
模型来存储来自应用程序的传入请求数据的应用程序。要使用 Deno,你需要在
schema.prisma
文件的generator
块中添加预览功能标记deno
。此外,Deno 要求你在自定义位置生成 Prisma Client。你可以在generator
块中的output
参数中启用此功能。为了满足这两个要求,请将以下行添加到generator
块中schema.prismagenerator client {
provider = "prisma-client-js"
previewFeatures = ["deno"]
output = "../generated/client"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Log {
id Int @id @default(autoincrement())
level Level
message String
meta Json
}
enum Level {
Info
Warn
Error
} -
在你的
.env
文件中,将当前占位符连接字符串postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public
替换为你的 PostgreSQL 连接字符串。
2. 创建数据库模式
有了数据模型并配置了数据库连接后,你现在可以将数据模型应用到你的数据库中。
deno run -A npm:prisma migrate dev --name init
该命令执行两件事
- 它为本次迁移创建一个新的 SQL 迁移文件
- 它对数据库运行 SQL 迁移文件
此时,该命令还有两个额外的副作用。该命令安装 Prisma Client 并为项目创建 package.json
文件,其中包括 @prisma/client
包作为依赖项。
3. 为 Prisma Accelerate 生成 Prisma Client
接下来,使用 --no-engine
标记为 Prisma Accelerate 生成 Prisma Client。稍后,你将使用Prisma Accelerate 通过 HTTP 连接到你的数据库。
deno run -A --unstable npm:prisma generate --no-engine
在 Prisma ORM 5.2.0 之前,--no-engine
标记不可用。请改用 --accelerate
标记。
deno run -A npm:prisma generate --accelerate
你现在拥有了一个数据库模式和一个为 Prisma Accelerate 本地生成的 Prisma Client。
4. 创建你的应用程序
你现在可以创建一个本地 Deno 应用程序。在项目根文件夹中创建 index.ts
并添加以下内容
import { serve } from 'https://deno.land/[email protected]/http/server.ts'
import { PrismaClient } from './generated/client/deno/edge.ts'
const prisma = new PrismaClient()
async function handler(request: Request) {
const log = await prisma.log.create({
data: {
level: 'Info',
message: `${request.method} ${request.url}`,
meta: {
headers: JSON.stringify(request.headers),
},
},
})
const body = JSON.stringify(log, null, 2)
return new Response(body, {
headers: { 'content-type': 'application/json; charset=utf-8' },
})
}
serve(handler)
VS Code 错误:导入路径不能以 '.ts' 扩展名结尾
如果你使用 VS Code 并看到 index.ts
开头的 import
语句出现错误 导入路径不能以 '.ts' 扩展名结尾
,你需要安装VS Code 的 Deno 扩展,选择**视图** > **命令面板**并运行命令**Deno:初始化工作区配置**。这会告诉 VS Code 当前项目中的 TypeScript 文件需要使用 Deno 运行,然后触发正确的验证。
下一步
你暂时还无法运行此脚本,因为你还没有使用 Prisma Client 连接数据库所需的 Prisma Accelerate 连接字符串。在本指南的后面,你将在下次将应用程序添加到 Prisma Data Platform 时获得所需的凭据。
之后,你将在本地测试你的应用程序。
5. 在 Prisma Data Platform 中启用 Accelerate
开始使用 Prisma Accelerate
- 注册一个免费账户
- 创建一个项目
- 导航到您创建的项目
- 启用 Accelerate
- 生成一个 Accelerate 连接字符串并将其复制到剪贴板
6. 在你的环境中配置 Prisma Accelerate
复制了 Accelerate 连接字符串后,你可以将其替换为在 .env
文件中创建数据库模式时使用的现有连接字符串。
Prisma Client 在 Deno 上默认不读取 .env
文件,因此你还需要在本地安装 dotenv-cli
。
配置 Prisma Accelerate
-
安装
dotenv-cli
。npm install dotenv-cli
-
将 Prisma Accelerate 连接字符串添加到
.env
文件中。此外,请注释掉直接连接字符串。.envDATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=__API_KEY__"
# Previous database connection
# DATABASE_URL="postgres://..."
现在,你的本地环境配置已准备好通过 Prisma Accelerate 将 Prisma Client 查询发送到数据库。
7. 在本地测试你的应用程序
你现在可以在本地启动你的应用程序并测试日志条目的创建。
npx dotenv -- deno run -A ./index.ts
在网络浏览器中,打开https://127.0.0.1:8000/。此页面将你的请求写入数据库。
{
"id": 3,
"level": "Info",
"message": "GET https://127.0.0.1:8000/",
"meta": {
"headers": "{}"
}
}
刷新页面几次。
每次刷新时,脚本都会生成一个新的日志条目,并且当前日志条目的 ID 会递增。
这确认了你的应用程序在从本地环境运行时可以正常工作。
8. 创建一个仓库并推送到 GitHub
你需要一个 GitHub 仓库才能将你的项目添加到 Deno Deploy,并在每次推送更改时启用自动部署。
设置 GitHub 仓库
-
使用以下命令在本地初始化你的代码仓库,并将更改推送到 GitHub
git init -b main
git remote add origin https://github.com/<username>/prisma-deno-deploy
git add .
git commit -m "initial commit"
git push -u origin main
9. 部署到 Deno Deploy
使用 GitHub 代码仓库将你的应用程序添加到 Deno Deploy
- 访问 https://dash.deno.com/new。
- 选择一个 GitHub 组织或用户,然后选择一个代码仓库。
- 选择一个生产分支,并选择**自动**模式,以便每次你将更改推送到代码仓库时,Deno Deploy 都会进行部署。
- 选择
index.ts
作为项目的入口点。 - 要定义 Accelerate 连接字符串,请点击**添加环境变量**。
- 对于**KEY**,输入
DATABASE_URL
。 - 对于**VALUE**,粘贴 Accelerate 连接字符串。
- 对于**KEY**,输入
- 点击**链接**。
等待第一次 Deno 部署完成。
第一次部署完成后,你的浏览器将重定向到项目视图。
后续步骤
点击右上角的蓝色**查看**按钮,打开已部署的 Deno 应用程序。
应用程序显示的结果与你在本地测试时类似,并且新的Log
记录 ID 编号会递增。
{
"id": 5,
"level": "Info",
"message": "GET https://prisma-deno-deploy.deno.dev/",
"meta": {
"headers": "{}"
}
}
总结
你已成功部署了一个使用 TypeScript 创建的 Deno 应用程序,该应用程序使用 Prisma Client for Prisma Accelerate 连接到 PostgreSQL 数据库。