Vercel部署T3-Stack应用遇TRPC 405错误及段错误求助
解决方案:T3-Stack(TRPC+Prisma)部署Vercel后405+段错误问题
根源定位
日志中的segmentation fault(段错误)是核心问题,由Prisma Client与CLI版本不一致导致引擎兼容性故障,405错误是服务崩溃后的次生错误,并非CORS或请求方法配置问题。
优先修复步骤(针对Prisma段错误)
统一Prisma版本
日志显示@prisma/client@5.8.1与prisma@5.9.1版本不匹配,执行以下命令对齐版本:pnpm add prisma@5.8.1 @prisma/client@5.8.1 # 或直接升级到最新兼容版本 pnpm add prisma@latest @prisma/client@latest重新生成Prisma Client:
pnpm prisma generate配置Prisma适配Vercel环境
在prisma/schema.prisma中添加二进制目标配置,确保引擎适配Vercel的RHEL环境:generator client { provider = "prisma-client-js" binaryTargets = ["rhel-openssl-1.0.x", "native"] }确保Vercel构建时生成Prisma Client
修改package.json的build脚本,加入prisma generate:"scripts": { "build": "prisma generate && next build", // 其他脚本... }同时在Vercel项目设置的「Build & Development Settings」中,将Package Manager设置为
pnpm。
TRPC 405错误后续验证
解决段错误后,405问题通常会自动消失。若仍存在:
- 删除
next.config.js和vercel.json中的重复CORS配置,TRPC的Next.js适配器已默认处理OPTIONS请求,重复配置易引发冲突。 - 检查TRPC API路由文件(
app/api/trpc/[trpc]/route.ts或pages/api/trpc/[trpc].ts),确保适配器配置正确,示例:import { fetchRequestHandler } from '@trpc/server/adapters/fetch'; import { appRouter } from '../../../server/api/root'; import { createTRPCContext } from '../../../server/api/trpc'; const handler = (req: Request) => fetchRequestHandler({ endpoint: '/api/trpc', req, router: appRouter, createContext: createTRPCContext, }); export { handler as GET, handler as POST };
应急重构方案(若Prisma问题无法快速解决)
替换Prisma为Drizzle ORM,适配T3-Stack且无二进制引擎依赖,迁移成本低:
- 安装依赖:
pnpm add drizzle-orm drizzle-kit pg # 以PostgreSQL为例,根据数据库替换驱动 - 将Prisma Schema转换为Drizzle的TypeScript Schema文件(可手动转换或使用Drizzle迁移工具)。
- 在TRPC路由中替换Prisma Client调用为Drizzle查询语句。
- 重新部署到Vercel,无需额外配置二进制引擎。
内容的提问来源于stack exchange,提问作者KaanDev
相关产品推荐
相关产品推荐

