ARTICLE DETAIL

资讯详情

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

Wasp 生产环境数据库部署指南:PostgreSQL 连接、Prisma 迁移与故障排查

Wasp 生产环境数据库部署指南:PostgreSQL 连接、Prisma 迁移与故障排查 Wasp 生产环境数据库部署指南PostgreSQL 连接、Prisma 迁移与故障排查【免费下载链接】waspThe batteries-included full-stack framework for the AI era. Develop JS/TS web apps (React, Node.js, and Prisma) using declarative code that abstracts away complex full-stack features like auth, background jobs, RPC, email sending, end-to-end type safety, single-command deployment, and more.项目地址: https://gitcode.com/GitHub_Trending/wa/wasp导读本文是 Wasp 框架部署系列中的数据库专题讲解应用从本地开发走向生产环境时数据库环节的完整处理方式如何为 Wasp 生成的服务端应用配置生产数据库、如何通过wasp db migrate-dev创建 Prisma 迁移、生产环境中迁移如何被自动应用以及迁移失败时的排查方法。读完本文你将掌握 Wasp 项目在 Fly、AWS RDS 等托管 PostgreSQL 服务或自托管数据库上落地的完整数据库操作路径并能独立处理迁移无法应用如何用 Studio 查看生产库等实战问题。生产数据库要求PostgreSQL DATABASE_URLWasp 生成的服务端应用统一使用PostgreSQL数据库这一点在 Wasp 的 Prisma 配置规范中也有明确规定schema.prisma的datasource块中provider只允许postgresql或sqlite后者仅用于本地开发且url字段必须写为env(DATABASE_URL)否则 Wasp 无法正常工作见 Prisma Schema 文件说明。从 Wasp 的角度看对生产数据库的唯一硬性要求是服务器应用能够通过服务端环境变量DATABASE_URL访问到该数据库。也就是说数据库的部署位置是灵活的可以与服务器应用运行在同一台机器上自托管 PostgreSQL也可以使用托管 PostgreSQL 服务例如 Fly Postgres、AWS RDS 等。只要连接串形如postgresql://user:passwordhost:port/dbname能通过DATABASE_URL提供给服务器进程Wasp 生成的代码即可正常工作。由于部署时.env.server文件会被忽略你需要在托管平台侧设置该环境变量例如 Fly 上使用fly secrets set详见 生产环境变量文档。迁移机制schema 变更如何同步到生产库Wasp 的数据模型以项目根目录下的schema.prisma文件为唯一事实来源见 Prisma Schema 文件说明。每当你修改该文件——例如新增一个 model、修改字段类型或增加约束——都需要创建一条迁移migration。迁移本质上是描述这次 schema 变更的一组 SQL 命令。它的核心价值在于可复用性同一组迁移可以依次应用到多个数据库上。多人在同一个项目上协作时可以各自把同样的变更应用到本地数据库部署上线时同样的变更也会应用到生产数据库从而保证所有环境的 schema 始终一致。创建迁移wasp db migrate-dev修改完 Prisma schema 后在 Wasp 项目根目录运行wasp db migrate-dev该命令会在项目的migrations目录下生成一条新迁移其中包含描述本次 schema 变更的 SQL 语句。从源码看这条命令并非直接调用 Prisma CLI而是经过 Wasp 的封装CLI 命令入口 解析参数后在生成的.wasp/out应用中执行 Prisma 的migrate dev子命令并把生成的迁移文件从生成目录回拷到源码的migrations目录见 DbGenerator 的迁移任务实现。实际执行时Wasp 会附带--skip-generate跳过自动重新生成 Prisma Client由后续编译流程统一处理和--skip-seed避免迁移时自动执行种子脚本。此外CLI 还支持两个可选参数# 仅生成迁移 SQL 文件不实际应用到数据库 wasp db migrate-dev --create-only # 为迁移指定一个可读名称便于后续在 migrations 目录中识别 wasp db migrate-dev --name add_email_to_user这两个参数在 CLI 解析逻辑 和 Prisma 参数组装逻辑 中均有对应实现--create-only会追加 Prisma 的--create-only标志--name则透传为 Prisma 的--name参数。开发环境迁移自动应用在开发阶段只要你运行wasp start所有未应用的迁移就会自动应用到本地开发数据库。这也是本地开发默认使用 SQLite或本地 PostgreSQL时能即时反映 schema 变更的原因。生产环境启动前自动应用待迁移在生产环境中服务器应用在正式启动前会先检查是否存在待应用的迁移若有则先应用它们再启动服务器。这样数据库 schema 始终与 Prisma schema 保持同步。这一行为的底层实现值得展开说明生成的服务端 package.json 模板中定义了两个 npm 脚本见 服务端 package.json 模板start开发环境使用直接启动打包后的服务器db-migrate-prodprisma migrate deploy --schema../db/schema.prisma以非交互式方式将migrations目录中所有尚未应用的迁移依次应用到数据库——这正是为生产环境准备的关键一步因为它不会在遇到待定变更时弹出交互提示这是migrate dev与migrate deploy的核心区别start-production由生成器动态填充。start-production脚本的生成逻辑位于 ServerGenerator.hs当应用存在实体即使用数据库时它被生成为npm run db-migrate-prod NODE_ENVproduction npm run start即先执行prisma migrate deploy应用待迁移再以生产模式启动服务器。若应用不含任何实体则退化为仅NODE_ENVproduction npm run start。Docker 部署路径同样遵循该约定Dockerfile 模板 在生产镜像的ENTRYPOINT中直接写入npm run start-production同时通过COPY db/ .wasp/out/db/将迁移文件与 schema 一并带入镜像保证容器启动时能够完成迁移。迁移失败常见原因与排查迁移可能在应用时与数据库现有数据发生冲突而失败例如给一个已存在重复值的字段添加unique约束将一个可空字段改为非空但表中存在 NULL 值其他任何与现有数据不兼容的 schema 变更。发生失败时的表现服务器应用会记录错误日志并停止启动。此时你需要连接到生产数据库查看具体原因。推荐排查手段检查数据库中的_prisma_migrations表失败的那条迁移会记录在其中该表由 Prisma 自动维护记录每条迁移的名称、时间戳、校验和与执行状态。修复步骤以添加唯一约束遇重复值为例从数据库中清理重复值使该字段满足新约束从_prisma_migrations表中删除那条失败的迁移记录重启服务器应用start-production会重新尝试应用该迁移。提示wasp db studio无法用于查看生产库的_prisma_migrations表Studio 只展示 Prisma 模型中定义的业务表如需查看可改用通用数据库管理工具如 DBeaver 或 pgAdmin。连接生产数据库wasp db studio 的正确姿势开发阶段你可以用wasp db studio打开一个基于 Web 的数据库管理界面来检视本地数据库其底层是prisma studio见 DbGenerator 的 studio 任务。同一工具也可以用来检视生产数据库做法是在运行命令前通过终端环境变量把DATABASE_URL指向生产库DATABASE_URLpostgresql://user:passwordhost:port/dbname wasp db studioWasp 的 Prisma 相关命令包括 studio会从服务器目录读取DATABASE_URL参见 runPrismaCommandAsJobFromWaspServerDir 的注释因此以终端环境变量形式注入即可覆盖默认配置。为什么要用终端变量而不是 .env.server把生产库的DATABASE_URL写进项目的.env.server文件也能让wasp db studio生效但存在一个隐患你可能会忘记移除它。一旦该文件保留了生产库地址之后在开发环境执行wasp start时迁移包括wasp db migrate-dev触发的变更就会意外地作用到生产数据库上造成不可控的数据改动。因此官方强烈推荐只在当前终端会话中设置DATABASE_URL环境变量用完即止避免污染项目配置。如果你使用的是 Fly.io 托管的 PostgreSQL官方还专门撰写了一份指南介绍如何安全地在该场景下对生产库运行wasp db studio——核心思路即上述会话级环境变量注入同时可结合 Fly 的数据库代理proxy机制建立本地连接后再执行 Studio。小结围绕生产环境的数据库本文覆盖了三条主线连接生产数据库必须是 PostgreSQL通过服务端环境变量DATABASE_URL提供给 Wasp 生成的应用部署位置同机自托管或 Fly Postgres、AWS RDS 等托管服务不限迁移schema 变更通过wasp db migrate-dev支持--create-only与--name落成migrations目录中的迁移文件开发环境由wasp start自动应用生产环境由start-production脚本即prisma migrate deploy 生产模式启动在服务启动前自动应用该逻辑在 package.json 模板、ServerGenerator.hs 与 Dockerfile 模板 中均可验证排障与检视迁移失败时通过_prisma_migrations表定位问题、清理冲突数据后重启服务重试检视生产数据则使用DATABASE_URL... wasp db studio的会话级注入方式避免污染.env.server而对生产库造成意外写入。配合 生产环境变量配置 与 Prisma Schema 文件规范即可完整打通 Wasp 应用从本地开发到生产上线的数据库链路。【免费下载链接】waspThe batteries-included full-stack framework for the AI era. Develop JS/TS web apps (React, Node.js, and Prisma) using declarative code that abstracts away complex full-stack features like auth, background jobs, RPC, email sending, end-to-end type safety, single-command deployment, and more.项目地址: https://gitcode.com/GitHub_Trending/wa/wasp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表