Json-server vercel 배포 시 db.json read-only file system 문제

pds·2022년 12월 13일
0

TIL

목록 보기
26/60

EROFS: read-only file system



db.json이 read-only라 GET 요청만 가능한 문제



PATCH , DELETE 등의 요청을 할 때

EROFS: read-only file system, open ...

라는 오류가 발생했다.


해결하기

아니 뭔 read-only 인가 싶어서 구글링을 좀 해보고 힌트를 얻어 해결했던 것 같다.

This error is most often caused by attempts to write data from a serverless function to a read-only file at runtime. You can work around this by using /tmp if you only need temporary storage, as mentioned in an another comment thread. If you need persistent storage, then a more permanent data storage service is needed. There are some database integration options that can make it pretty easy to set up!

/tmp 라는 임시 폴더에 위치한 파일들 빼고는 read-only이기 때문에 수정을 못하는 것이라고 이해했다.

json-server 라는 상황에 맞을만한 마땅한 해결법은 잘 찾기 힘들어서

그냥 직접 tmp폴더에 db.json을 이동시켜 사용할 수 있도록 구성해보았다.


const fs = require("fs");
const os = require("os");

fs.copyFile("db.json", os.tmpdir() + "/db.json", function (err) {
  if (err) console.log(err);
  else console.log("copy file succeed to" + os.tmpdir());
});

os라는 모듈에 tmpDir() 이라는 os에 맞는 tmp 폴더 경로를 찾아주는 메소드가 있길래 사용했고

그곳으로 프로젝트 내 루트에 있는 db.json을 복사하도록 하였고


const server = jsonServer.create();
const router = jsonServer.router(path.resolve(os.tmpdir() + "/db.json"));

/tmp 에 있는 db.json을 DB처럼 router가 사용할 수 있게 설정해주었다.

밑에 넣어둔 레퍼런스를 보고 했으면 파일 복사가 아니라

파일 sync를 해서 쓰기만 /tmp로 줄 수 있었을 것 같아 아쉽긴 하지만

어쨌든 생각한 대로 진행하니 해결이 되었서 좋았다!


Reference

profile
강해지고 싶은 주니어 프론트엔드 개발자

0개의 댓글