2013-05-06 15 views
11

Ich versuche, einige Umgebungsvariablen in Django-Einstellungen zu lesen, die ich in /home/user/.bashrc (und letzterer in /etc/bash.bashrc) definiert habe, aber alle Ich bekomme eine KeyError-Ausnahme. Ich weiß, dass meine Umgebungsvariablen gesetzt sind, weil ich sie im Terminal drucken kann (Echo $ VAR_NAME). Dies sollte trivial sein.Umgebungsvariablen können in der Django-Einstellungsdatei nicht abgerufen werden

Dies ist der Code, den ich verwende.

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

Ich kann einfach nicht finden, was fehlt. Irgendwelche Vorschläge da draußen?

Dank

EDIT: mit mod_wsgi auf Apache laufen.

+0

Wie läuft der Server? – Rohan

+0

Ich führe mein Projekt auf Apache mit mod_wsgi. – luistm

+0

Sollten diese in der Datei virtualhost definiert sein? – luistm

Antwort

1

Ich habe gerade vor kurzem die Ursache für diese selbst.

Wenn Sie unter apache/mod_wsgi ausgeführt werden, wird Ihre Anwendung unter einem anderen Benutzer ausgeführt, daher sind diese Umgebungsvariablen nicht festgelegt. Ihre Optionen sind:

  1. Verwenden Apache SetEnv Direktive in Ihrer Virtualhost config
  2. die Umgebungsvariablen für den Benutzer, den Apache läuft Ihr Code wie oder
  3. Apache Sagen Sie der wsgidaemon Prozess als Benutzer ausführen .
+1

Für Prozessumgebungsvariablen wird keines davon strikt funktionieren. Die SetEnv-Direktive legt nur WSGI-Umgebungsvariablen und keine Prozessumgebungsvariablen pro Anforderung fest. Das Einrichten von Objekten in der Umgebung des Apache-Benutzers wird nicht helfen, da Apache als Root gestartet wird und eine saubere Standard-Host-Umgebung erbt. Sie möchten keine Inhalte zur globalen Standardhostumgebung hinzufügen. Auch die Verwendung des Daemon-Modus als spezifischer Benutzer wird nicht helfen, da Benutzer-Anmeldeskripte niemals ausgeführt werden, und so können nun Umgebungsvariablen auf diese Weise aufgenommen werden. –

+1

Am einfachsten ist es, alle Prozessumgebungsvariablen als Nebeneffekt der geladenen WSGI-Skriptdatei festzulegen. –

Verwandte Themen