2013-05-06 2 views
11

장고 설정에서 /home/user/.bashrc (그리고 후자는 /etc/bash.bashrc)에 정의 된 일부 환경 변수를 읽으려고합니다. 그러나 모두 내가 얻을 KeyError 예외입니다. 내 환경 변수는 터미널에서 인쇄 할 수 있기 때문에 설정되어 있다는 것을 알고 있습니다 (echo $ VAR_NAME). 이것은 사소한 것이어야합니다.장고 설정 파일에서 환경 변수를 가져올 수 없습니다.

이것은 내가 사용하고있는 코드입니다.

from django.core.exceptions import ImproperlyConfigured 

msg = "Set the %s environment variable" 


def get_env_variable(var_name): 
    try: 
     return os.environ[var_name] 
    except KeyError: 
     error_msg = msg % var_name 
     raise ImproperlyConfigured(error_msg) 

OS_DB_USER = get_env_variable('MY_USER') 
OS_DB_PASS = get_env_variable('MY_PASS') 
OS_DB_DB = get_env_variable('MY_DB') 
OS_GAME_LOGS = get_env_variable('DIR_LOGS') 

실종 내용을 찾을 수 없습니다. 거기에 어떤 제안?

감사

편집 : mod_wsgi에 아파치에서 실행.

+0

서버를 어떻게 실행하고 있습니까? – Rohan

+0

mod_wsgi를 사용하여 Apache에서 프로젝트를 실행하고 있습니다. – luistm

+0

가상 호스트 파일에 정의해야합니까? – luistm

답변

1

나는 최근이 자신의 원인을 발견했습니다.

apache/mod_wsgi에서 실행하면 응용 프로그램이 다른 사용자로 실행되므로 해당 환경 변수가 설정되지 않습니다. 옵션은 다음과 같습니다

  • 는 아파치로 코드를 실행하는 사용자에 대한 환경 변수를 설정하여 가상 호스트 설정에
  • 사용 아파치적인 SetEnv 지시자,
      , 또는
    1. 하는 사용자로 wsgidaemon 프로세스를 실행하기 위해 아파치에게 .
  • +1

    프로세스 환경 변수의 경우 아무 것도 엄격하게 작동하지 않습니다. SetEnv 지정 문은 요청 당 WSGI 환경 변수 만 설정하고 환경 변수는 처리하지 않습니다. 아파치 사용자 환경에서 물건을 설정하는 것은 아파치가 루트로 시작하고 깨끗한 기본 호스트 환경을 상속 받기 때문에 도움이되지 않습니다. 글로벌 기본 호스트 환경에 물건을 추가하고 싶지는 않습니다. 그리고 특정 사용자로 데몬 모드를 사용하는 것은 도움이되지 않습니다. 사용자 로그인 스크립트가 실행되지 않으므로 그런 식으로 환경 변수를 가져올 수 있습니다. –

    +1

    가장 쉬운 방법은로드되는 WSGI 스크립트 파일의 부작용으로 프로세스 환경 변수를 설정하는 것입니다. –

    관련 문제