2017-06-21 22 views
0

我試圖從Apache配置讀取數據庫設置並出現錯誤。我嘗試了很多其他問題的解決方案,但看起來這可能是Django 1.11版本問題。在Django讀取Apache配置變量槽wsgi時遇到困難1.11

這就是我所擁有的。

在httpd.conf:

<VirtualHost *:80> 
    .... 

    SetEnv DB_NAME XYZ 
    SetEnv DB_USER abc 

    .... 
</VirtualHost> 

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

在settings.py:

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

     ...... 
     }, 
    } 

當我運行我的應用程序,我得到'內部服務器錯誤'。

這是在apache_error.log:

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

}

回答

0

SetEnv只設置每個請求的WSGI ENVIRON字典中的值,而不是全過程的環境變量。您需要設置wsgi.py文件中的進程環境變量,或者從第一次導入wsgi.py文件的副作用處理的Python代碼文件或配置文件中設置進程環境變量。

Apache系統配置中唯一可以設置進程範圍環境變量的地方是envvars文件,但並非Linux系統上的所有Apache發行版都支持該功能。它也不被推薦,因爲它爲整個Apache設置它們,而不是在Apache下運行單個應用程序。