2017-06-21 1 views
0

Ich versuche, Datenbankeinstellungen aus der Apache-Konfiguration zu lesen und Fehler zu bekommen. Ich habe viele Lösungen aus anderen Fragen ausprobiert, aber es sieht so aus, als wäre dies das Django 1.11-Versions-Problem.Probleme beim Lesen der Apache-Konfigurationsvariablen durch wsgi in Django 1.11

Das ist was ich habe.

In httpd.conf:

<VirtualHost *:80> 
    .... 

    SetEnv DB_NAME XYZ 
    SetEnv DB_USER abc 

    .... 
</VirtualHost> 

In wsgi.py:

import os, sys 
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 
PROJECT_DIR = os.path.abspath(os.path.join(BASE_DIR, '..')) 

sys.path.append(PROJECT_DIR) 

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings' 

import django.core.handlers.wsgi 
_application = django.core.handlers.wsgi.WSGIHandler() 

env_variables_to_pass = ['DB_NAME', 'DB_USER', ] 

def application(environ, start_response): 
    for var in env_variables_to_pass: 
    os.environ[var] = environ.get(var, '') 
    return _application(environ, start_response) 

In settings.py:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': os.environ['DB_NAME'], 
     'USER': os.environ['DB_USER'], 

     ...... 
     }, 
    } 

Und wenn Ich starte meine Anwendung, ich erhalte 'Internal Server Error'.

Dies ist, was in der apache_error.log:

[wsgi:error] raise KeyError(key) from None\r 
[wsgi:error] KeyError: 'DB_NAME'\r 

}

Antwort

0

SetEnv nur setzt die pro Anfrage WSGI environ Wörterbuch Werte, nicht breit Umgebungsvariablen verarbeiten. Sie müssten die Prozessumgebungsvariablen aus der Datei wsgi.py oder aus einer Python-Codedatei oder einer Konfigurationsdatei festlegen, die als Nebeneffekt beim ersten Importieren der Datei wsgi.py verarbeitet wurde.

Der einzige Ort in der Systemkonfiguration für Apache, in dem Sie prozessweite Umgebungsvariablen setzen können, ist in einer envvars Datei, aber nicht alle Apache-Distributionen auf Linux-Systemen unterstützen dies. Es wird auch nicht empfohlen, da es für den gesamten Apache und nicht für einzelne Anwendungen unter Apache gesetzt wird.

Verwandte Themen