Prisma与PlanetScale生产/开发Schema不一致,Vercel部署字段缺失求助
解决Prisma + PlanetScale部署Vercel后字段缺失问题
检查Prisma Client生成与部署同步
开发环境更新Schema后,你本地肯定重新生成了Prisma Client,但部署到Vercel时可能没同步最新的生成文件或Schema:- 部署前务必在本地执行
prisma generate,并把生成的@prisma/client相关文件(如果是自定义输出目录,比如./prisma/client)提交到版本控制。 - 确认Vercel的构建命令包含
prisma generate,比如在package.json的scripts里设置"build": "prisma generate && next build"(Next.js项目为例),让Vercel构建时自动生成最新的Client。
- 部署前务必在本地执行
核对PlanetScale分支的Schema同步情况
可能你开发用的是PlanetScale的开发分支,而Vercel生产环境连接的是主分支,主分支的Schema没同步image这类新字段:- 登录PlanetScale控制台,检查生产环境关联分支的Schema,确认所有字段都存在。
- 如果分支不同步,用PlanetScale的部署请求(deploy request)把开发分支的Schema变更推送到生产分支。
排查查询语句的字段限制
代码里的查询逻辑可能在生产环境不小心限制了返回字段:- 检查API路由或数据获取代码,确认没手动用
select只指定id、name、price三个字段。比如:
错误示例:
正确写法(全量返回):const products = await prisma.product.findMany({ select: { id: true, name: true, price: true } })
或者明确指定需要的所有字段:const products = await prisma.product.findMany()const products = await prisma.product.findMany({ select: { id: true, name: true, price: true, image: true } })
- 检查API路由或数据获取代码,确认没手动用
清除Vercel缓存重新部署
Vercel可能缓存了旧的构建产物,导致新变更没生效:- 到Vercel控制台找到对应项目,手动触发重新部署,勾选"Redeploy with cache cleared"选项,确保拉取最新代码和依赖。
内容的提问来源于stack exchange,提问作者Gabriel Lazcano
相关产品推荐
相关产品推荐

