Prisma CLI `prisma info` 命令详解:查看服务端点、Stage 与集群部署信息
2026/9/23 2:24:38 网站建设 项目流程
  • 后端
  • 数据库
  • GraphQL

【免费下载链接】prisma1

💾 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB) [deprecated]

项目地址:https://gitcode.com/gh_mirrors/pr/prisma1
点击查看免费下载

prisma info是 Prisma CLI 中用于查看当前 Prisma 服务(Service)运行信息的核心命令,它能一次性列出服务当前部署到的全部集群、所处的 Stage(开发/生产等环境),以及对应的 HTTP 与 WebSocket API 端点,并支持以 JSON 形式输出以便脚本消费。本文以 prisma1 仓库中 1.12 版本的官方命令参考文档为主体,结合prisma-cli-coreprisma-yml的源码实现,为你完整讲解该命令的用法、全部 flags、输出格式以及底层实现原理。

命令作用与适用场景

prisma info面向 Prisma 服务开发者与运维人员,用于快速确认以下三类信息:

  • 服务当前已部署到的全部集群(cluster)
  • 当前服务所处的 Stage(如devstagingprod
  • 服务的 API 端点,包括 HTTP 端点与 WebSocket(订阅)端点

典型应用场景包括:部署后核对服务地址是否正确暴露、排查订阅功能所需的 WebSocket 端口、在 CI/CD 脚本中以--json模式抓取端点信息用于后续的 API 测试或数据导入导出。

基本用法

在包含prisma.yml的 Prisma 服务目录下直接执行:

prisma info

命令会读取当前目录(或通过--project指定的路径)下的prisma.yml,解析出服务名(service)、Stage(stage)与集群信息,然后输出服务信息。

在源码中,该命令由InfoCommand实现,其topicinfo,描述为Display service information (endpoints, cluster, ...)。执行时,命令会通过definition.load()加载 Prisma 定义文件,随后依次取出serviceNamestage与 workspace,再调用getCluster()获取集群——如果prisma.yml中没有设置cluster属性,命令会直接抛出错误提示:

No cluster set. Please set the "cluster" property in your prisma.yml

Flags 参数详解

官方参考文档定义了三个核心 flags,源码实现中还额外提供了两个实用选项,完整清单如下:

Flag简写类型说明
--env-file-estring指定.env文件路径,用于注入环境变量(如PRISMA_ENDPOINTPRISMA_MANAGEMENT_API_SECRET
--json-jboolean以 JSON 格式输出服务信息,便于脚本解析
--secret-sboolean在 JSON 输出中包含服务 secret(必须与--json配合使用
--current-cboolean已废弃(Deprecated),仅保留兼容
--project-pstring指定 Prisma 定义文件(prisma.yml)的路径,默认使用当前目录下的定义文件

其中--env-file的说明为 "Path to .env file to inject env vars",--project的说明为 "Path to Prisma definition file"。这两个 flags 由 CLI 引擎的 flags 机制统一解析(对应源码 info/index.ts 中的flags定义)。

关于--secret的注意事项

源码 info/index.ts 中的逻辑明确显示:只有printJson(即--json)为真时,--secret才会把secrets写入输出对象;如果只传--secret而不传--json,secret 不会出现在普通文本输出中。官方文档也对此做了特别说明:

Note: The secret will not be printed if the--jsonflag is not provided.

输出格式与字段说明

文本模式(默认)

不带任何参数执行prisma info时,命令会先输出一行Service Name: <服务名>(服务名以粗体显示),随后输出各 Stage 的信息块。根据 printStage 的实现,每个 Stage 的输出结构为:

<stage> (cluster: `<cluster名称>`) HTTP: <HTTP API 端点> Websocket: <WebSocket 端点>
  • HTTP:即 GraphQL API 端点,由cluster.getApiEndpoint(name, stage, workspace)计算得出。
  • Websocket:订阅端点,由cluster.getWSEndpoint(name, stage, workspace)计算得出,其实现就是把 HTTP 端点 URL 的http前缀替换为ws(见 Cluster.ts)。

如果当前集群版本不低于1.29.0,输出末尾还会额外附带一段 Prisma Admin 入口链接:

You can view & edit your data here: Prisma Admin: <HTTP端点>/_admin

这一判断由satisfiesVersion(version, '1.29.0')完成,Prisma Admin 链接由 printAdminLink 拼装,格式为{API端点}/_admin

JSON 模式(--json

执行prisma info --json时,输出变为格式化的 JSON 对象,包含以下字段:

字段说明
name服务名(service)
stage当前 Stage
cluster集群名称
workspace所属 workspace(共享集群场景下存在,否则为null
httpEndpointHTTP API 端点
wsEndpointWebSocket 端点
secret服务 secret 数组(仅当同时传入--secret时出现)

JSON 由JSON.stringify(result, null, 2)生成,缩进 2 个空格,便于阅读与脚本解析(对应 info/index.ts)。

官方文档示例

打印当前服务信息

prisma info

输出示例(文本模式):

Service Name: my-service dev (cluster: `local`) HTTP: http://localhost:4466/my-service/dev Websocket: ws://localhost:4466/my-service/dev

以 JSON 格式打印当前服务信息

prisma info --json

输出示例:

{ "name": "my-service", "stage": "dev", "cluster": "local", "workspace": null, "httpEndpoint": "http://localhost:4466/my-service/dev", "wsEndpoint": "ws://localhost:4466/my-service/dev" }

以 JSON 格式打印服务信息并包含 secret

prisma info --json --secret

输出示例(JSON 对象中会额外出现secret字段):

{ "name": "my-service", "stage": "dev", "cluster": "local", "workspace": null, "httpEndpoint": "http://localhost:4466/my-service/dev", "wsEndpoint": "ws://localhost:4466/my-service/dev", "secret": ["your-service-secret"] }

注意:务必同时传入--json,否则 secret 不会被打印。

端点生成规则与底层实现

prisma info展示的 HTTP/WebSocket 端点并非硬编码,而是由 Cluster.getApiEndpoint 依据服务名、Stage 与 workspace 动态拼接,规则如下:

  • 非共享集群且service === 'default'stage === 'default'时,直接返回集群baseUrl
  • 非共享集群且stage === 'default'时,返回${baseUrl}/${service}
  • 私有集群或本地(local)集群时,返回${baseUrl}/${service}/${stage}
  • 其余情况(共享集群),返回${baseUrl}/${workspace}/${service}/${stage}(workspace 存在时)。

而服务名与 Stage 本身则是从prisma.ymlendpoint字段中解析出来的:PrismaDefinitionservicestagegetter 会通过parseEndpoint从 endpoint 中拆解出服务名与 Stage(见 PrismaDefinition.ts),getWorkspace()则用于提取共享集群场景下的 workspace。

以本地部署的典型 endpoint 配置为例:

endpoint: http://localhost:4466/my-service/dev

执行prisma info时,service解析为my-servicestage解析为dev,最终输出http://localhost:4466/my-service/devws://localhost:4466/my-service/dev

相关命令与后续操作

prisma info输出的 HTTP 端点可以直接用于 GraphQL 查询与订阅,也可与数据导入导出功能衔接:

  • prisma import:向服务导入数据,内部使用getImportEndpoint拼装${endpoint}/import
  • prisma export:从服务导出数据,内部使用getExportEndpoint拼装${endpoint}/export
  • prisma deploy:在部署后可通过prisma info核对新 Stage 的端点。

此外,--json输出适合在脚本中通过jq等工具提取httpEndpoint字段,用于自动化测试、健康检查或 CI/CD 流程中的动态配置注入。

小结

prisma info是一个轻量但实用的诊断命令,通过一行命令即可掌握服务的集群部署情况、Stage 环境以及 HTTP/WebSocket 双端点。掌握--json--secret的组合用法,可以让你在自动化运维与脚本集成中更高效地消费这些信息;理解其背后的端点拼接规则,则有助于在遇到端点不符合预期时快速定位是prisma.yml配置还是集群类型所致。

  • 后端
  • 数据库
  • GraphQL

【免费下载链接】prisma1

💾 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB) [deprecated]

项目地址:https://gitcode.com/gh_mirrors/pr/prisma1
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询