我正在开发一个部署在 Vercel 上的 Next.js 项目,使用 Prisma 和 SQLite 数据库。项目在本地运行良好,但在 Vercel 上,我不断遇到以下错误:
TypeError: Cannot open database because the directory does not exist at new Database (/var/task/node_modules/better-sqlite3/lib/database.js:65:9)
Vercel 的无服务器环境似乎无法打开数据库文件,因为该目录不存在。以下是我的数据库 URL 在环境变量中的定义方式:
DATABASE_URL="file:./welisara.db"
USER_DATABASE_URL="file:./userswelisara.db"
我尝试过的步骤:
在本地,一切都很完美。 SQLite 数据库已正确创建和访问。 在Vercel上,我认为这个问题可能与Vercel环境是只读的有关,
如何解决这个问题
SQLite 不能在无服务器环境中使用,因为没有持久文件系统来永久存储数据。当发出写请求时,SQLite 需要服务器上的本地文件系统,这在无服务器环境中不可用
由于无服务器功能的存储是短暂的,因此不存在中央的、单一的永久存储。当函数接收更多并发流量时,会创建该函数的新实例,并且每个实例不能共享相同的存储。
参考 - Vercel 支持 SQLite 吗?
考虑使用 Postgres Neon、Turso 或 Vercel Postgres 等数据库服务。