跳到主要内容

部署到 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 runprisma init 初始化你的应用程序,作为一个带有 npm 标识符的 npm 包

设置你的应用程序

  1. 打开你的终端并导航到你选择的位置。

  2. 运行以下命令来设置你的应用程序。

    mkdir prisma-deno-deploy
    cd prisma-deno-deploy
    deno run -A npm:prisma init
  3. 编辑 prisma/schema.prisma 文件以定义数据模型并启用 deno 预览功能标志。

    在本指南的后面部分,你将创建一个使用 Log 模型来存储来自应用程序的传入请求数据的应用程序。

    要使用 Deno,你需要将预览功能标志 deno 添加到你的 schema.prisma 文件的 generator 代码块中。此外,Deno 要求你在自定义位置生成 Prisma Client。你可以使用 generator 代码块中的 output 参数启用此功能。为了满足这两个要求,请将以下行添加到 generator 代码块中

    schema.prisma
    generator 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
    }
  4. 在你的 .env 文件中,将当前的占位符连接字符串 postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public 替换为你的 PostgreSQL 连接字符串。

2. 创建数据库 schema

数据模型到位并且数据库连接配置完成后,你现在可以将数据模型应用到你的数据库。

deno run -A npm:prisma migrate dev --name init

该命令执行两件事

  1. 它为此迁移创建一个新的 SQL 迁移文件
  2. 它针对数据库运行 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

  1. 注册一个免费账户
  2. 创建一个项目
  3. 导航到你创建的项目
  4. 启用 Accelerate
  5. 生成一个 Accelerate 连接字符串并将其复制到你的剪贴板

6. 在你的环境中配置 Prisma Accelerate

复制 Accelerate 连接字符串后,你可以替换你在 .env 文件中用于创建数据库 schema 的现有连接字符串。

Prisma Client 默认情况下不会在 Deno 上读取 .env 文件,因此你还必须在本地安装 dotenv-cli

配置 Prisma Accelerate

  1. 安装 dotenv-cli

    npm install dotenv-cli
  2. 将 Prisma Accelerate 连接字符串添加到 .env 文件。 另外,注释掉直接连接字符串。

    .env
    DATABASE_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 存储库

  1. 创建一个私有的 GitHub 存储库.

  2. 在本地初始化你的存储库并将你的更改推送到 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

  1. 转到 https://dash.deno.com/new
  2. 选择一个 GitHub 组织或用户,然后选择一个存储库。
  3. 选择一个生产分支,然后选择 “自动” 模式,以便 Deno Deploy 可以在每次你将更改推送到存储库时进行部署。
  4. 选择 index.ts 作为你项目的入口点。
  5. 要定义 Accelerate 连接字符串,请单击 “添加环境变量”。
    1. 对于 “键”,输入 DATABASE_URL
    2. 对于 “值”,粘贴 Accelerate 连接字符串。 Deno Deploy - project parameters
  6. 单击 “链接”。
    等待第一次 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 数据库。