2017-06-21 6 views
0

J'ai essayé beaucoup de solutions à partir d'autres questions, mais il semble que ce soit le problème de version Django 1.11.Je n'arrive pas à lire les paramètres de base de données à partir de la configuration d'Apache et j'obtiens une erreur lors de la lecture du fichier wsgi de la variable de configuration Apache wsgi dans Django 1.11

C'est ce que j'ai.

En httpd.conf:

<VirtualHost *:80> 
    .... 

    SetEnv DB_NAME XYZ 
    SetEnv DB_USER abc 

    .... 
</VirtualHost> 

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

En settings.py:

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

     ...... 
     }, 
    } 

Et quand Je cours mon application, j'obtiens l'erreur interne de serveur.

C'est ce que dans le apache_error.log:

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

}

Répondre

0

SetEnv établit que la demande pour les valeurs de dictionnaire WSGI ronnement, pas traiter de grandes variables d'environnement. Vous devez définir les variables d'environnement de processus à partir du fichier wsgi.py ou à partir d'un fichier de code Python ou d'un fichier de configuration traité comme un effet secondaire de l'importation du fichier wsgi.py la première fois. Le seul endroit dans la configuration système pour Apache où vous pouvez définir des variables d'environnement à l'échelle du processus se trouve dans un fichier envvars, mais toutes les distributions Apache sur le système Linux ne le supportent pas. Il est également déconseillé car il les définit pour l'ensemble d'Apache et non pour les applications individuelles exécutées sous Apache.