Next 13 Vercel部署中出现“EROFS:只读文件系统”错误

ia2d9nvy  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(161)

我有一个Next.js 13 API路由,它应该能够将用户列表写入文件。我也有一个从用户json文件读取的路由。

const USERS_FILE_PATH = join(process.cwd(), '/tmp', 'data.json');
fs.writeFileSync(POSTS_FILE_PATH, JSON.stringify(users));

在我的本地机器上,我能够读取和写入文件,但是当我使用Vercel部署时,我可以读取,但写入会引发此错误:

EROFS: read-only file system, open '/var/task/tmp/data.json'

我看到here使用'/tmp'文件夹是一个我可以使用的变通方法,但它仍然不起作用。如果你能帮忙的话,我将不胜感激。

ergxz8rk

ergxz8rk1#

您不是在写入/tmp,而是在写入./tmp(如错误所示:/var/task/tmp在你的情况下)。整个问题是,你的应用程序目录是不可写的(这是一件好事-你不希望有东西能够修改你的应用程序,除了通过一个新的部署),所以只要你使你的路径相对于,写在那里仍然不会工作。
path.join中删除process.cwd()

const USERS_FILE_PATH = join('/tmp', 'data.json');

然而,这听起来仍然像是一个可扩展的解决方案,因为一旦AWS破坏了您的执行环境(例如,当它没有使用时),您的数据就会消失。此外,当你有更多的流量,AWS将通过创建多个并行执行环境来扩展你的功能时,突然之间,哪个请求“看到”哪个数据将是随机的,因为每个示例都有自己的版本!相反,您需要使用数据库来实现持久性,而不是本地文件。

相关问题