2013-05-06 17 views
11

Sto provando a leggere alcune variabili di ambiente nelle impostazioni di Django, che ho definito in /home/user/.bashrc (e quest'ultimo in /etc/bash.bashrc), ma tutto ottengo è un'eccezione KeyError. So che le mie variabili di ambiente sono impostate, perché posso stamparle sul terminale (echo $ VAR_NAME). Questo dovrebbe essere banale.Impossibile ottenere le variabili di ambiente nel file delle impostazioni di Django

Questo è il codice che sto usando.

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

Non riesco a trovare ciò che manca. Qualche suggerimento là fuori?

Grazie

EDIT: Running on Apache con mod_wsgi.

+0

Come si esegue il server? – Rohan

+0

Sto eseguendo il mio progetto su Apache con mod_wsgi. – luistm

+0

Dovrebbero essere definiti nel file virtualhost? – luistm

risposta

1

ho appena trovato la causa di questo me stesso.

Quando si esegue in apache/mod_wsgi, l'applicazione viene eseguita con un altro utente, quindi le variabili di ambiente non sono impostate. Le opzioni disponibili sono:

    direttiva
  1. utilizzare Apache SetEnv nella configurazione virtualhost,
  2. Impostare le variabili di ambiente per l'utente che Apache funziona il codice come, o
  3. ad Apache per eseguire il processo wsgidaemon come utente .
+1

Per le variabili di ambiente di processo, nessuno di questi funzionerà in modo rigoroso. La direttiva SetEnv imposta solo le variabili di ambiente WSGI per richiesta e non le variabili di ambiente di processo. L'impostazione di elementi nell'ambiente dell'utente Apache non sarà di aiuto in quanto Apache viene avviato come root ed eredita un ambiente host predefinito pulito. Non vuoi aggiungere roba all'ambiente host globale predefinito. E l'utilizzo della modalità daemon come utente specifico non sarà di aiuto, dal momento che gli script di accesso degli utenti non vengono mai eseguiti e così ora le variabili d'ambiente possono essere raccolte in questo modo. –

+1

La cosa più semplice da fare è impostare qualsiasi variabile di ambiente di processo come effetto collaterale del file di script WSGI che viene caricato. –

Problemi correlati