[오류 노트] 인스턴스에서 RAILS_ENV가 변경되지 않을 때

오류 발생 상황

인스턴스에 Ruby On Rails 프로젝트가 배포되어 있는 상황에서 profile.d 에 있는 RAILS_ENV를 다른 값으로 변경했는데 정상적으로 반영되지 않았다. 더 자세히 설명하자면

profile.d 의 임의의 파일에

export RAILS_ENV=test

로 설정되어 있을 때 실제 코드에서 ENV 를 출력하면 다른 설정된 내용들은 정상적으로 나오지만 ,, RAILS_ENV 는 다른 값으로 출력되는 오류였다.

심지어 Rails.env 로 환경에 대한 정보를 가져온 다음에 분기로 코드를 구분하는 부분이 있어서 환경에 따라 다르게 실행되어야 하는 코드가 모두 동일하게 실행 되고 있었다.

도대체 내 머리론 이해가 안되서 화가 머리 끝까지 나던 그때 .. 배포 과정 중 passenger 을 실행할 때 test 가 아니라 다른 환경으로 실행되는 걸 발견했다.

해결 방법

RoR 서버 같은 경우 Nginx + Passenger 로 구성되어 있는데, RAILS_ENV 같은 경우 passenger 에서도 설정해주기 때문에 발생한 문제다.

passenger 란 ?
WEB, WAS를 겸하는 서버로, nodejs와 nginx 패키지를 지원
passenger 와 nginx 는 거의 통합되어 있음
passenger는 엔진엑스의 요청을 받아 노드로 전달하고, 여러 개의 노드 프로세서를 관리하며, 로드밸런싱 기능을 제공

즉, 내가 test 로 환경변수를 지정하고 배포를 해도 passenger 에는 다른 환경으로 RAILS_ENV 를 세팅해줘서 test 로 안보였던 것 ..

관련해서는 passenger 관련 docs 에서 볼 수 있다.
➡️ https://www.phusionpassenger.com/library/config/nginx/reference/

이 옵션은 현재 응용 프로그램에 대해 다음 환경 변수의 값을 설정합니다.

RAILS_ENV
RACK_ENV
WSGI_ENV
NODE_ENV
PASSENGER_APP_ENV
일부 웹 프레임워크(예: Rails 및 Connect.js)는 이러한 환경 변수 중 하나의 값에 따라 동작을 조정합니다.

승객은 기본값을 프로덕션으로 설정합니다. (실가동 환경에서 실행하는 것이 아니라) 애플리케이션을 개발하는 경우에는 이 설정을 개발로 설정해야 합니다.

기타 환경변수를 설정하려면 passenger_env_var를 사용하십시오.

또한 이 옵션을 설정하면 응용 프로그램 환경 이름이 기본 응용 프로그램 그룹 이름에 추가되므로 여러 버전의 응용 프로그램을 서로 다른 응용 프로그램 환경 이름으로 실행할 수 있습니다.

passenger_app_env 를 test 로 바꿔주니깐 너무 잘됨 🤕

역시 컴퓨터는 거짓말을 하지 않는다 ..

좋은 웹페이지 즐겨찾기