ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Prisma 1.x `prisma deploy` 完全指南:服务定义同步、集群选择与种子数据注入

Prisma 1.x `prisma deploy` 完全指南:服务定义同步、集群选择与种子数据注入 后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载prisma deploy是 Prisma CLI 的核心命令负责把本地 服务定义文件prisma.yml及其中引用的 数据模型.md)Data Model同步到远程 Prisma 服务驱动数据库 schema 迁移、订阅配置更新与首次部署时的数据播种。读完本文你将掌握prisma deploy的完整使用方式、全部 flag 的语义与适用场景理解 CLI 底层在集群探测、迁移执行、种子注入与post-deploy钩子上的完整调用链并能结合源码规避数据丢失等常见部署陷阱。一、命令概述本地变更如何抵达远端服务prisma deploy的作用非常直接将服务定义变更部署到远端。每当你对 服务配置尤其是prisma.yml中的任意文件——包括datamodel指向的数据模型文件——做了本地修改都必须执行该命令把变更同步到远端服务否则远端 API 与数据库结构不会感知到你的改动。在 CLI 源码 中命令的执行主流程依次为校验--env-file指向的.env文件是否存在读取并加载prisma.yml可通过--env-file注入环境变量并强制校验datamodel属性必须存在解析服务名service与阶段stage若两者缺失或指定了交互模式则拉起集群选择向导EndpointDialog并把选定的endpoint写回prisma.yml检查目标集群可用性本地集群需在线、处理登录与集群凭据探测目标项目servicestage是否已存在不存在则先创建调用客户端执行部署进入迁移轮询阶段直至迁移成功或失败按需执行post-deploy钩子、自动生成 Prisma Client、首次部署时执行 seed。值得注意的是源码中命令的description为 Deploy service changes (or new service)即它同时承担“同步既有服务变更”和“创建全新服务”两种职责projectNew标记在后续 seed 与迁移流程中起到关键作用。二、Usage 与 Flags 详解2.1 基础用法prisma deploy [flags]2.2 全部 Flags 一览文档定义的核心 flags 如下-d, --dry-run Perform a dry-run of the deployment -e, --env-file ENV-FILE Path to .env file to inject env vars -f, --force Accept data loss caused by schema changes -j, --json JSON Output -w, --watch Watch for changes --no-seed Disable seed on initial service deploy而在 deploy.ts 的 flags 定义 中实际注册的 flag 更为丰富按其职责可分组如下部署行为控制Flag短名类型说明--force-fboolean接受 schema 变更可能引起的数据丢失忽略警告继续部署--dry-run-dboolean仅执行部署预演打印潜在的 schema 变更不实际应用--no-seed—boolean首次部署服务时禁用数据播种--no-migrate—boolean禁用迁移需要 Prisma 1.26 及以上版本支持--no-generate—boolean禁用部署成功后的隐式 Prisma Client 生成--skip-hooks—boolean禁用prisma deploy触发的一切钩子含post-deploy输入与环境控制Flag短名类型说明--env-file-estring.env文件路径用于注入环境变量--project-pstringPrisma 定义文件prisma.yml路径--new-nboolean强制进入交互模式重新选择集群源码中用interactive变量承接--json-jboolean以 JSON 格式输出输出控制Flag短名类型说明--json-jbooleanJSON 输出提示在部分文档版本中交互模式通过--interactive触发在当前仓库源码中该能力由--new-n承载源码注释明确说明 “new is a reserved keyword, so we use interactive instead”部署到不同版本 CLI 时请以prisma deploy --help输出的实际 flag 为准。2.3 关键 flag 的底层行为--env-file若指定的路径不存在CLI 会直接报错退出见 deploy.ts。该文件中的环境变量会注入到prisma.yml的${env:...}变量解析中典型场景是区分.env.dev、.env.prod等多环境部署。--force当迁移产生 warnings 且未加--force时CLI 会打印警告并直接exit(1)终止部署加了--force则打印 Ignoring warnings because you provided --force. 后继续见 deploy.ts。它用于确认接受 schema 变更可能带来的数据丢失风险。--dry-run只输出Potential changes:列表而不真正应用迁移若无变更则打印 There are no changes.见 deploy.ts适合在 CI 中预览影响面。--json输出结构化 JSON便于脚本解析部署结果。三、首次部署与集群交互选择如果prisma.yml中没有指定endpoint或集群相关属性prisma deploy会启动交互式向导引导你选择一个 cluster 作为部署目标。选择完成后CLI 会把生成的endpoint形如http://localhost:4466/myservice/dev自动写回prisma.yml作为后续部署的默认目标prisma deploy从源码看交互逻辑位于 deploy.ts当serviceName或stage缺失或传入了交互 flag 时CLI 会先fetchClusters()拉取可用集群再通过EndpointDialog.getEndpoint()依次询问 workspace、cluster、service 名与 stage最终调用replaceEndpoint把选择结果持久化进prisma.yml并打印Written endpoint \... to prisma.yml 确认。如果你想再次调出该交互向导只需手动删除prisma.yml中的endpoint或对应集群配置再执行prisma deploy或在支持--new/--interactive的 CLI 版本中直接传入该 flagprisma deploy --interactive关于endpoint的构成endpoint编码了 Prisma server、workspace仅 Prisma Cloud、服务名与 stage 四类信息参见 prisma.yml 的 YAML 结构文档。例如# 本地 Docker 部署serverlocalhost:4466servicedefaultstagedefault endpoint: http://localhost:4466/default/default # 当 service 与 stage 均为 default 时可省略为 http://localhost:4466/四、将环境变量注入部署--env-fileprisma deploy支持在部署时通过.env文件注入环境变量典型的多环境工作流如下prisma deploy --env-file .env.prod.env.prod中定义的变量会被prisma.yml的${env:...}语法引用例如# prisma.yml secret: ${env:PRISMA_SECRET}在加载prisma.yml时CLI 会把--env-file路径交给 PrismaDefinitionClass.load 处理从而完成${env:...}的解析与替换。除环境变量外prisma.yml还支持${self:...}递归自引用复用同一文件内的custom等属性值两者可以嵌套组合例如custom: serverlessEndpoint: https://bcdeaxokbj.execute-api.eu-west-1.amazonaws.com/dev subscriptions: sendWelcomeEmail: query: database/subscriptions/sendWelcomeEmail.graphql webhook: https://${self:custom.serverlessEndpoint}/sendWelcomeEmail五、首次部署的自动 Seed 与--no-seed当某个服务第一次被部署源码中由projectNew标记时如果prisma.yml中配置了seed属性CLI 会在部署完成后自动执行数据播种你可以用--no-seed显式关闭prisma deploy --no-seedseed 的两种形态seed属性是一个对象二选一配置import指向包含 GraphQL 变更操作mutation的.graphql文件或包含 Normalized Data Format (NDF) 数据集的.zip文件seed: import: database/seed.graphqlseed: import: database/backup.ziprun指定一个 shell 命令适用于更复杂的播种脚本seed: run: node script.js源码中的 seed 执行逻辑在 deploy.ts 中seed 触发条件被严格限定为migrationResult.migration存在、seed属性已配置、未传--no-seed且projectNew true。真正的播种逻辑封装在 Seeder 中其校验规则值得留意未配置seed属性时抛错In order to seed, you need to provide a seed property in your prisma.ymlseed.import与seed.run同时存在时抛错二者不可兼用import指向的文件后缀必须是.zip或.graphql且文件必须存在.graphql文件会被解析为多条 GraphQL 操作getOperations按OperationDefinition切分逐条通过client.exec执行.zip文件则走Importer.upload导入流程参见 Importerseed.run通过cross-spawn在prisma.yml所在目录执行命令退出码非 0 即视为失败。提示由于 seed 仅在projectNew时触发若首次部署时遗漏了数据后续部署不会自动补种。需要时可用prisma reset见 CLI 命令参考清空数据后再通过prisma seed见 prisma-seed 文档手动播种。六、部署输出解读与常见状态6.1 正常部署输出prisma deploy成功后CLI 会打印Changes / Potential changes实际或 dry-run 预演的schema 变更步骤列表Your Prisma endpoint is live包括 HTTP 与 WebSocketWS两个 endpoint见 printEndpoints在 Prisma 1.29 还会附带 Admin UI 链接。6.2 无变更当远端服务已与本地定义一致时输出 Service is already up to date.dry-run 下为 There are no changes.。6.3 错误与警告的处理策略迁移失败迁移轮询阶段一旦发现migration.errors非空CLI 立即中止并抛出异常错误信息会明确指出 The Migration failed and has not been performed. This is very likely not a transient issue.见 deploy.ts。此时需修复数据模型或数据库状态后重试。部署 errorsprintResult检测到payload.errors时会打印错误列表并exit(1)。部署 warnings未加--force时同样exit(1)并提示 If you want to ignore the warnings, please deploy with the --force flag。这是防止破坏性变更如删除字段/表导致数据丢失的默认安全护栏。6.4 迁移轮询机制部署请求发出后CLI 每 500ms 轮询一次迁移状态以(applied/of)形式展示进度见 deploy.ts。判定完成的依据是migration.applied达到总步骤数或状态落入SUCCESS/ROLLBACK_SUCCESS/ROLLBACK_FAILURE。这意味着即使迁移在服务端部分回滚CLI 也会结束轮询并把最终状态反馈给用户。七、部署后自动化post-deploy钩子与隐式 Client 生成7.1hooks.post-deployprisma.yml中的hooks.post-deploy允许在部署成功后执行任意终端命令典型用途是拉取最新 GraphQL schema 并触发代码生成hooks: post-deploy: - echo Deployment finished - graphql get-schema --project db - graphql prepare源码中CLI 在迁移完成后逐个执行钩子见 deploy.ts命令输出会透传到终端命令退出码非 0 会以红叉标记失败。通过--skip-hooks可整体禁用。7.2 隐式 Client 生成与钩子重复警告从 Prisma 1.31 开始prisma deploy成功后会自动执行prisma generate生成 Prisma Client无需再通过post-deploy钩子手动触发。源码中的检测逻辑deploy.ts会轮询迁移至SUCCESS后自动运行GenerateCommand若发现你的post-deploy钩子里还包含prisma generate字样会打印黄色警告The prisma1 generate command was executed twice.并建议你移除冗余钩子。可用--no-generate关闭这一隐式生成行为。八、部署前的准备清单与最佳实践结合 CLI 总览文档 与上文源码分析给出如下可落地的部署建议初始化通过npm install -g prisma安装 CLI用prisma init引导创建服务骨架再逐步完善prisma.yml。先 dry-run 再真部署在 CI 或变更较大时先执行prisma deploy --dry-run检查Potential changes确认无预期外变更后再正式部署。谨慎处理破坏性变更删除字段/模型等可能导致数据丢失的 schema 变更会产生 warnings确认业务可接受后使用--force否则部署会被安全中止。多环境用 env-file 隔离为dev/prod分别准备.env.dev/.env.prod配合prisma deploy --env-file .env.prod与${env:...}变量引用避免敏感配置进入版本库。首次部署规划 seed利用seed.import或seed.run预置基础数据--no-seed可在需要“空库”上线时使用。钩子与生成策略Prisma 1.31 无需在post-deploy中再写prisma generate需要完全静默部署时可组合--skip-hooks --no-generate。JSON 输出集成自动化脚本或 CI 流水线可用--json解析部署结果便于断言与告警。相关文档与源码索引命令总览CLI Command Reference Overview服务定义文件prisma.yml Overview Example、prisma.yml YAML Structure数据模型Data Modelling (SDL).md)、Migrations核心实现deploy.ts、Seeder.ts相关命令prisma init、prisma seed、prisma reset赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐Prisma CLI prisma deploy 命令深度指南服务部署、数据种子与集群选择Prisma CLI prisma deploy 命令深度指南服务部署、数据种子与集群选择 prisma deploy 是 Prisma 1.x CLI 中用后端数据库GraphQL华硕笔记本性能控制的轻量化革命G-Helper全面解析与实战指南华硕笔记本性能控制的轻量化革命G Helper全面解析与实战指南 你是否曾为华硕Armoury Crate的臃肿而感到困扰启动缓慢、内存占用高、功能冗余等问后端数据库GraphQLPrisma CLI prisma deploy 命令完全指南同步服务定义、处理数据迁移与自动化部署流程Prisma CLI prisma deploy 命令完全指南同步服务定义、处理数据迁移与自动化部署流程 prisma deploy 是 Prisma 1.x后端数据库GraphQL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表