2013-05-06 18 views
11

Próbuję odczytać niektóre zmienne środowiskowe w ustawieniach Django, które zdefiniowałem w /home/user/.bashrc (i ostatnie w /etc/bash.bashrc), ale wszystkie otrzymuję wyjątek KeyError. Wiem, że moje zmienne środowiskowe są ustawione, ponieważ mogę je wydrukować w terminalu (echo $ VAR_NAME). To powinno być trywialne.Nie można pobrać zmiennych środowiskowych w pliku ustawień Django

To jest kod, którego używam.

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') 

Po prostu nie mogę znaleźć tego, czego brakuje. Jakieś sugestie?

Dzięki

EDIT: Bieganie na Apache z mod_wsgi.

+0

Jak działa serwer? – Rohan

+0

Mam uruchomiony mój projekt na Apache z mod_wsgi. – luistm

+0

Czy należy je zdefiniować w pliku virtualhost? – luistm

Odpowiedz

1

Właśnie niedawno znalazłem przyczynę tego sam.

Po uruchomieniu pod apache/mod_wsgi, aplikacja działa pod innym użytkownikiem, więc te zmienne środowiskowe nie są ustawione. Dostępne są następujące opcje:

    dyrektywa
  1. Zastosowanie apache SetEnv w virtualhost config,
  2. Ustaw zmienne środowiskowe dla użytkownika, że ​​Apache działa kod jak, lub
  3. Powiedz apache, aby uruchomić proces wsgidaemon jako użytkownik .
+1

Dla zmiennych środowiska procesowego żadna z nich nie będzie ściśle działać. Dyrektywa SetEnv ustawia tylko dla zmiennych środowiskowych WSGI dla żądania i nie przetwarza zmiennych środowiskowych. Ustawienie rzeczy w środowisku użytkownika Apache nie pomoże, ponieważ Apache jest uruchamiany jako root i dziedziczy czyste domyślne środowisko hosta. Nie chcesz dodawać rzeczy do globalnego domyślnego środowiska hosta. Używanie trybu demona jako konkretnego użytkownika również nie pomoże, ponieważ skrypty logowania użytkowników nigdy nie są wykonywane i dlatego teraz zmienne środowiskowe mogą być pobierane w ten sposób. –

+1

Najłatwiej jest ustawić dowolne zmienne środowiskowe procesu jako efekt uboczny ładowanego pliku skryptu WSGI. –

Powiązane problemy