2013-10-13 8 views
2

dotcloud는 환경 변수로 많은 유용한 정보를 제공하지만 내 nginx.conf은 환경 변수에 액세스 할 수 없습니다. 이 문제를 해결하는 좋은 방법은 무엇입니까?nginx.conf의 dotcloud env 변수 사용

다음은 시나리오입니다. www 정적 서비스의 특정 URL을 내 rest 서비스로 리디렉션하고 싶습니다. 따라서 현재 대상 URL을 nginx.conf으로 하드 코딩하고 있습니다. 차라리 DOTCLOUD_REST_HTTP_HOST 변수를 사용하면 내 서비스를 쉽게 마이그레이션 할 수 있습니다.

+0

dotcloud가'env' conf 명령에 대한 액세스를 비활성화합니까? http://wiki.nginx.org/CoreModule#env –

답변

4

이 사용하는 좋은 경우입니다 서비스 용 postinstall 스크립트 dotCloud는 푸시 및 배포주기의 각 단계에서 실행하기 위해 build hooks을 제공하고 postinstall 후크가 마지막으로 실행되어 모든 환경 변수에 액세스 할 수 있습니다. 변수는 ~/environment.json에서 읽거나 실제 환경에서 읽을 수 있습니다 (파일은 환경에 적용되는 것이 서비스 유형에 따라 달라질 수 있으므로 약간 더 신뢰할 수 있습니다).

www: 
    approot: www 
    type: static 
    environment: 
    LIMITRATEVAR: 2k 

하고 (WWW/nginx.conf 있음)의 예 nginx.conf :

# limitratevar should get set in dotcloud.yml's environment section 
# or via `dotcloud env set limitratevar` if you want to set it for all services. 
# And then use a postinstall script to update this nginx.conf with sed 
limit_rate LIMITRATEVAR; 

최종적 예 postinstall는 WWW (/ 사후 검색된 여기

는 예 dotcloud.yml 인) $ LIMITRATEVAR의 값을 환경 밖에서 읽고 nginx.conf를 sed으로 업데이트하십시오 :

2

해결책 : here은 DotCloud에서 구현하는 데 문제가있을 수는 없지만 일부 시도에서는 효과가 있지만 사용하지 않은 경우 가치가 있습니다.

env MYVAR; 

HTTP 수준에서 :

perl_set $myvar 'sub { return $ENV{"MYVAR"}; }'; 

다음, 예를 들어, 서버 수준에서 : 상위 설정 수준에서

root $myvar; 
+0

DotCloud는 전역으로 지정된'server {}'블록 안에'nginx.conf' 파일을 포함하고 있습니다. 필자는 최상위 구성을 제어 할 수 없기 때문에'env' 지시어를 사용할 수 없습니다. – prideout

+0

Gotcha. 그 경우에는 아무것도 없어. 미안. –

+0

누구든지 통제 할 수있는 사람과 대화해야합니다. :) –