• TOC

prisma의 datamodel 에 새로운 field를 추가하고 다시 heroku서버에 빌드하는 방법을 정리해보려고합니다. 저는 게시물을 불러올 때 최신 게시물부터 보여주기 위해 createdAt,updatedAt을 추가하려고합니다.

1. prisma에 새로운 field추가하기

- createdAt updateAt 버전 에러 강제로 빌드하기

1566126637873

createdAt을 추가할 경우 버전 에러때문에 위와 같은 상황이 나와서 deploy force를 사용해야합니다.

1566126954041

npm run-script deployf

위 명령어를 작성하면 아래와 같이 새로운 field가 생겼다는 내용이 나옵니다.

1566127009540

- models.graphql 에 추가하기

js가 이해할 수 있도록 models.graphql을 정의해야하기 때문에 updatedAt, createdAt을 정의해야합니다.

1566127307308


2. src 폴더 build하기

heroku서버에 빌드하기 위해선 일단 local에 build파일을 만들어야 합니다. build 파일을 만들기 위해서는 아래의 Script중에서 build를 사용해야합니다.

1566127478494

이 명령어에 대해 다시 설명하면 babel은 세련된 js를 오래된 js 로 변경해주는 역할을 하고 src는 src폴더만 build하겠다는 뜻입니다.

npm run build

build를 진행하게 되면 prebuild -> build -> postbuild 순서로 진행됩니다.

prebuild

npm run generate를 보면 prisma를 만들어주는 역할을 합니다.

prisma generate
postbuild

.graphql파일을 인식하지 못하는데 그것을 복사해주는 역할을 합니다.

src/api//.graphql 에 있는 파일을 ./build/api 로 옮기는 코드입니다.

3. heroku에 push하기

git add .
git commit --allow-empty -m "add createdAt "
git push heroku master

1566128701982

1566128732457

heroku prod 서버일 때 prisma deploy 가 안되는 이슈

위 방법으로 했더니 동작을안하길래 이것저것 찾아 해결해본 결과 prisma deploy를 하지 않았기 때문입니다.

처음에 dev상태에서는 prisma deploy가 가능했지만 새로만든 service는 prod상태였기 때문에 안됐던 것 같습니다.

문제점

dev서비스에서는 prisma deploy가 됐지만 prod 서비스에서는 prisma deploy가 되지 않았음. 그래서

schema 수정을 하고나서 git push heroku master를 하게 되면 model.graphql이 업데이트 되지 않음. 결과적으로 새로운 field를 추가하는 것이 불가능했던 것.

해결책

우선 시도해본 것이 heroku app을 다시 만들어보는 것이었습니다. 앱을 다시 만들고 환경변수 설정을 해주고

git push heroku master

위 명령어로 push 를했더니 dev일 경우에만 prisma deploy 명령어가 동작했습니다. 그래서 우선 dev서비스링크를 환경변수에 넣어놓고, push를 할 때 아래와 같이 prebuild를 설정했습니다.

1566136031476

prebuild에서 npm run prisma를 실행해줄 때 dev서비스를 환경변수로 저장해놓았기 때문에 에러가 발생하지 않았고 정상적으로 push 가 됐습니다. 그런 상태에서 다시 heroku환경변수 설정하는 곳에 가서 만들어 놓은 prod서비스로 링크를 변경해주면 원하는 대로 동작했습니다.


결론

dev 서비스에서는 로컬빌드 서버빌드 둘다 잘됨.

prod서비스에서는 로컬빌드 잘 됨. 서버빌드 안됨.

dev서비스링크로 서버에 빌드시켜서 model.graphql 정상적으로 생성한 후에 prod 서비스 링크로 바꿈

추측

  1. prisma의 prod서비스는 prisma deploy라는 명령어가 동작하지 않는다.

    근데 이 말이 틀린 것이 로컬에서 빌드를 했을 때는 정상적으로 동작했던 것으로 봐서 아닌 것 같음.

  2. heroku서버에서 prisma의 prod서비스는 deploy가 불가능하다.

    서버내에서 deploy를 하기 위해서는 개발 서비스일 때만 가능한 것일 수도 있음.