2012-05-11 2 views
6

우리 레일 3.0x 애플 리케이션을위한 Nginx + Phusion Passenger로 우분투 서버를 운영하고 있습니다. 내가 콘솔 (번들 간부 레일 c) 및 출력 ENV [ "MC_TEST를"]을 실행하면phusion 여객 환경 변수가 보이지 않습니까?

MC_TEST=true 

내가 '진정한 참조 :

나는 테스트 시스템에서의/etc/환경 설정 환경 변수가 '. 그러나 동일한 코드를 페이지 (< % = ENV [ "MC_TEST"] %>)에두면 아무 것도 볼 수 없습니다. 그 변수는 존재하지 않습니다. 질문에 날 리드

:

1 - nginx를 (그러나 SetEnv를 아파치되지 않음)와 승객에 환경 변수를 얻을 수있는 적절한 방법은 무엇입니까?

2 - 승객에게 적절한 환경이없는 이유는 무엇입니까?

답변

7

Passenger fusion v4 +를 사용하면 bashrc 파일에서 직접 환경 변수를 읽을 수 있습니다. bashrc에 여객 프로세스가 실행되는 사용자의 홈 폴더에 살고 있는지 확인 여기에

이 bashrc에 대한 세부로가는 documentation이다 (필자의 경우는 EC2 리눅스와 nginx를 들어, 우분투를했다)

+0

해당 문서 섹션에서는 환경 변수에 대해 필요한 모든 것을 설명합니다. 그들이하는 일, 일하는 방식, 재산, Phusion Passenger에서 제공하는 앱으로 전달하는 방법. – Hongli

+0

그냥 메모하지만, 비 대화 형 셸에서도 기본적으로 작동합니다. – digicazter

4

우분투에서 nginx 및 nginx init 스크립트로 승객을 사용할 때도 같은 문제가 발생했습니다. 그 이유는 (init 스크립트에 의해 설치되는) sudo nginx restart를 사용하여 nginx를 시작하고
루트로 실행 중이었고 루트가 로그인 사용자 환경 변수를 얻지 못했기 때문입니다. 여기에는 두 가지 해결책이 있습니다. 하나는 수동으로 nginx를 실행 중입니다.

sudo service nginx stop 
sudo -E /path/to/your/nginx 

하나는 후자의 솔루션은 어떻게 든 못생긴 당신의 nginx init 스크립트

export MC_TEST=true 

에 ENV을 추가 할 것입니다,하지만 작동합니다. 그리고 더 나은 방법은 login 사용자 env를 보존하기 위해 init 스크립트에 알려주는 구성입니다.

+0

nginx를 실행하면 수동으로 트릭을 만들었습니다. 감사! – Myxtic

0

다른 추악한 솔루션이 있습니다.

env_file = '/etc/environment' 
if File.exist?(env_file) 
    text = File.open(env_file).read 
    text.each_line do |line| 
    key, val = line.split('=', 2) 
    ENV[key] = val.strip 
    end 
end 
관련 문제