Vercel部署Next.js+Prisma+SQLite时数据库目录不存在报错修复
解决Vercel部署Next.js+Prisma+SQLite的目录不存在报错
问题原因
Vercel的无服务器函数运行环境中,除了/tmp目录外,其余目录均为只读状态,且每次函数调用结束后环境会被重置。你当前配置的相对路径./welisara.db指向的目录不可写,导致无法创建/打开SQLite数据库文件。
临时测试方案(不支持数据持久化)
修改数据库URL指向可写临时目录
将环境变量中的数据库路径改为Vercel唯一可写的/tmp目录:
DATABASE_URL="file:/tmp/welisara.db" USER_DATABASE_URL="file:/tmp/userswelisara.db"
- 注意:
/tmp目录的内容会在函数调用结束后被清除,每次新的函数启动都会生成全新的空数据库,无法保留数据,仅适合临时验证功能。
确保Prisma初始化数据库
在API路由或Server Component的初始化逻辑中添加连接代码,确保函数启动时能自动创建数据库文件:
import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); // 初始化数据库连接,触发文件创建 async function initDB() { await prisma.$connect(); } // 在业务逻辑执行前调用初始化 await initDB();
持久化数据的推荐方案
由于SQLite的文件存储特性与Vercel无服务器环境的临时、分布式运行机制不兼容,若需要长期保留数据,建议改用云托管数据库:
- 选择Prisma支持的远程数据库,如PostgreSQL(Neon)、MySQL(PlanetScale)、Supabase等
- 修改环境变量为远程数据库的连接字符串,示例:
DATABASE_URL="postgresql://user:password@hostname:port/dbname?schema=public" - 这类数据库专为云环境设计,能在Vercel的无服务器函数中稳定运行,且完全支持数据持久化。
内容的提问来源于stack exchange,提问作者Isuru Eranga
相关产品推荐
相关产品推荐

