2017-06-21 1 views
0

Apache設定からデータベース設定を読み込み中にエラーが発生しました。私は他の質問から多くの解決策を試しましたが、これはDjango 1.11のバージョンの問題のようです。Django 1.11でApache config variable trough wsgiを読み込めませんでした。

これは私が持っているものです。 httpd.confの

:wsgi.pyで

<VirtualHost *:80> 
    .... 

    SetEnv DB_NAME XYZ 
    SetEnv DB_USER abc 

    .... 
</VirtualHost> 

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

     ...... 
     }, 
    } 

そして:settings.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) 

私は私のアプリケーションを実行すると、私は '内部サーバーのエラー'を取得しています。

これは何apache_error.logである:

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

}

答えて

0

SetEnvはリクエストのWSGI環境ディクショナリ値ごとに、広い環境変数を処理しない設定します。 wsgi.pyファイル、または最初にwsgi.pyファイルをインポートする副作用として処理されたPythonコードファイルまたは設定ファイルからプロセス環境変数を設定する必要があります。

プロセスワイド環境変数を設定できるApacheのシステム構成内の唯一の場所は、envvarsファイルですが、LinuxシステムのすべてのApacheディストリビューションでサポートされているわけではありません。また、Apacheの下で動作する個々のアプリケーションではなく、Apache全体に対して設定するので、推奨されません。

関連する問題