部署到 Deno Deploy
通过本指南,您可以学习如何构建一个简单的应用程序并将其部署到 Deno Deploy。该应用程序使用 Prisma ORM 将每个请求的日志保存到 PostgreSQL 数据库中。
本指南涵盖了 Prisma CLI 与 Deno CLI、Deno Deploy、Prisma Client 和 Prisma Accelerate 的使用。
本指南演示了如何结合 PostgreSQL 数据库将应用程序部署到 Deno Deploy,但您可以使用 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,你需要将预览功能标志
deno
添加到你的schema.prisma
文件的generator
代码块中。此外,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. 创建数据库 schema
数据模型到位并且数据库连接配置完成后,你现在可以将数据模型应用到你的数据库。
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
你现在拥有一个数据库 schema 和一个本地生成的用于 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
文件中用于创建数据库 schema 的现有连接字符串。
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
在 Web 浏览器中,打开 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 连接字符串,请单击 “添加环境变量”。
- 对于 “键”,输入
DATABASE_URL
。 - 对于 “值”,粘贴 Accelerate 连接字符串。
- 对于 “键”,输入
- 单击 “链接”。
等待第一次 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 数据库。