error log - EC2에서 PM2 실행시 NODE_ENV 설정 명령어

1

 
 

AWS EC2에 배포를 하려하는데, 조그만 문제가 하나 생겼다.
아래 예시와 같이 .env파일을 개발, 배포 등의 목적으로 각각 나누어 코드를 작성했는데,
 

main.ts 파일 코드 예시

 

if (process.env.NODE_ENV === 'production') {  
  dotenv.config({ path: path.join(__dirname, '/../env/.env.production') });  
} else if (process.env.NODE_ENV === 'develop') {  
  dotenv.config({ path: path.join(__dirname, '/../env/.env.dev') });  
  console.log('process.env.NODE_ENV is ', process.env.NODE_ENV);  
} else if (process.env.NODE_ENV === 'test') {  
  dotenv.config({ path: path.join(__dirname, '/../env/.env.test') });  
} else {  
  throw new Error('process.env.NODE_ENV IS_NOT_SET!!');  
}

 


 

이걸 EC2에서 pm2로 프로세스를 돌릴 때 어떻게 명령을 내려야 하는가 였다.
 

cross-env 설명을 보면 script의 가장 서두에 설정하고자 하는 값을 두면 된다고 한다.
 

Bug
"scripts": {  
  "distribute": "NODE_ENV=production npm i && pm2 start dist/main.js --name review -i max"  
},

NODE_ENV=production 이 코드를 처음에는 명령어의 가장 서두에 두었다.

 

ec2에서 pm2 list로 확인해보니 계속 에러가 나길래

cross-env NODE_ENV=production 이렇게도 바꿔보고 별 시도를 다 해봤다.

"scripts": {  
  "distribute": "cross-env NODE_ENV=production npm i && pm2 start dist/main.js --name review -i max"  
},

 

끝끝내 찾아낸 건 아주 간단하고도 허무했다.
 

Success

NODE_ENV=productionpm2 바로 앞에 두면 되는 것이었다.
 

"scripts": {  
  "distribute": "npm i && NODE_ENV=production pm2 start dist/main.js --name review -i max"  
},

 

&&는 명령을 순차적으로 하겠다는 것이며,
npm과 pm2는 다른 성격임에 해당 명령을 따로 주어야 하는데 이런 기본을 간과하고 엉뚱한 곳에서 답을 찾고 있었다.


 


  1. 사진 출처 : Unsplash ↩︎