Python Django从apache获取环境变量

Python Django从apache获取环境变量,python,django,apache,environment-variables,virtualenvwrapper,Python,Django,Apache,Environment Variables,Virtualenvwrapper,我似乎无法让Django从环境变量读取我配置的设置。我在网上阅读了一些指南,并发现了一些其他问题,因此我尝试了如下配置: Apache配置: WSGIScriptAlias "/v4" /usr/local/myproject4/myproject4/wsgi.py WSGIPythonPath /usr/local/myproject4:/usr/local/myproject4/env/lib/python2.7/site-packages <VirtualHost *:8000&g

我似乎无法让Django从环境变量读取我配置的设置。我在网上阅读了一些指南,并发现了一些其他问题,因此我尝试了如下配置:

Apache配置:

WSGIScriptAlias "/v4" /usr/local/myproject4/myproject4/wsgi.py
WSGIPythonPath /usr/local/myproject4:/usr/local/myproject4/env/lib/python2.7/site-packages

<VirtualHost *:8000>

        SetEnv MYPROJECT_SECRET_KEY 'xxx'
        SetEnv MYPROJECT_DB_USER 'xxxx'
        SetEnv MYPROJECT_DB_PASS 'xxxx'

        <Directory /usr/local/myproject4/myproject4>
                <Files wsgi.py>
                        Order deny,allow
                        Allow from all
                </Files>
        </Directory>


</VirtualHost>
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject4.settings")

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

def application(environ, start_response):
    for key, value in environ:
        if key.startswith('MYPROJECT_'):
            os.environ[key] = value;    
    return _application(environ, start_response)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx] mod_wsgi (pid=21912): Target WSGI script '/usr/local/myproject4/myproject4/wsgi.py' cannot be loaded as Python module.
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx] mod_wsgi (pid=21912): Exception occurred processing WSGI script '/usr/local/myproject4/myproject4/wsgi.py'.
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx] Traceback (most recent call last):
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/myproject4/wsgi.py", line 14, in <module>
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     from django.core.handlers.wsgi import WSGIHandler
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 11, in <module>
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     from django.core.handlers import base
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/core/handlers/base.py", line 12, in <module>
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     from django.db import connections, transaction
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/db/__init__.py", line 83, in <module>
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     signals.request_started.connect(reset_queries)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 88, in connect
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     if settings.DEBUG:
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/conf/__init__.py", line 54, in __getattr__
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     self._setup(name)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/conf/__init__.py", line 49, in _setup
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     self._wrapped = Settings(settings_module)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/conf/__init__.py", line 128, in __init__
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     mod = importlib.import_module(self.SETTINGS_MODULE)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     __import__(name)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/myproject4/settings.py", line 29, in <module>
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     SECRET_KEY = get_env_variable('MYPROJECT_SECRET_KEY')
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/myproject4/settings.py", line 23, in get_env_variable
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     raise ImproperlyConfigured(error_msg)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx] ImproperlyConfigured: Set the MYPROJECT_SECRET_KEY environment variable
但是,每当我尝试检索设置时,我都会得到以下信息:

WSGIScriptAlias "/v4" /usr/local/myproject4/myproject4/wsgi.py
WSGIPythonPath /usr/local/myproject4:/usr/local/myproject4/env/lib/python2.7/site-packages

<VirtualHost *:8000>

        SetEnv MYPROJECT_SECRET_KEY 'xxx'
        SetEnv MYPROJECT_DB_USER 'xxxx'
        SetEnv MYPROJECT_DB_PASS 'xxxx'

        <Directory /usr/local/myproject4/myproject4>
                <Files wsgi.py>
                        Order deny,allow
                        Allow from all
                </Files>
        </Directory>


</VirtualHost>
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject4.settings")

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

def application(environ, start_response):
    for key, value in environ:
        if key.startswith('MYPROJECT_'):
            os.environ[key] = value;    
    return _application(environ, start_response)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx] mod_wsgi (pid=21912): Target WSGI script '/usr/local/myproject4/myproject4/wsgi.py' cannot be loaded as Python module.
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx] mod_wsgi (pid=21912): Exception occurred processing WSGI script '/usr/local/myproject4/myproject4/wsgi.py'.
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx] Traceback (most recent call last):
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/myproject4/wsgi.py", line 14, in <module>
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     from django.core.handlers.wsgi import WSGIHandler
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 11, in <module>
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     from django.core.handlers import base
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/core/handlers/base.py", line 12, in <module>
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     from django.db import connections, transaction
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/db/__init__.py", line 83, in <module>
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     signals.request_started.connect(reset_queries)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 88, in connect
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     if settings.DEBUG:
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/conf/__init__.py", line 54, in __getattr__
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     self._setup(name)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/conf/__init__.py", line 49, in _setup
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     self._wrapped = Settings(settings_module)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/conf/__init__.py", line 128, in __init__
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     mod = importlib.import_module(self.SETTINGS_MODULE)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/env/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     __import__(name)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/myproject4/settings.py", line 29, in <module>
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     SECRET_KEY = get_env_variable('MYPROJECT_SECRET_KEY')
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]   File "/usr/local/myproject4/myproject4/settings.py", line 23, in get_env_variable
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx]     raise ImproperlyConfigured(error_msg)
[Wed Nov 20 17:07:08 2013] [error] [client xxx.xxx.xxx.xxx] ImproperlyConfigured: Set the MYPROJECT_SECRET_KEY environment variable
[Wed Nov 20 17:07:08 2013][error][client xxx.xxx.xxx.xxx]mod_wsgi(pid=21912):无法将目标wsgi脚本'/usr/local/myproject4/myproject4/wsgi.py'作为Python模块加载。
[Wed Nov 20 17:07:08 2013][error][client xxx.xxx.xxx.xxx]mod_wsgi(pid=21912):处理wsgi脚本'/usr/local/myproject4/myproject4/wsgi.py'时发生异常。
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]回溯(最近一次通话):
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]文件“/usr/local/myproject4/myproject4/wsgi.py”,第14行,在
[Wed Nov 20 17:07:08 2013][error][client xxx.xxx.xxx.xxx]来自django.core.handlers.wsgi导入WSGIHandler
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]文件“/usr/local/myproject4/env/lib/python2.7/site packages/django/core/handlers/wsgi.py”,第11行
[Wed Nov 20 17:07:08 2013][error][client xxx.xxx.xxx.xxx]来自django.core.handlers导入库
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]文件“/usr/local/myproject4/env/lib/python2.7/site packages/django/core/handlers/base.py”,第12行
[Wed Nov 20 17:07:08 2013][error][client xxx.xxx.xxx.xxx]来自django.db导入连接,事务
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]文件“/usr/local/myproject4/env/lib/python2.7/site packages/django/db/__init___;.py”,第83行
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]发出信号。请求\u已启动。连接(重置\u查询)
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]文件“/usr/local/myproject4/env/lib/python2.7/site packages/django/dispatch/dispatcher.py”,第88行,在connect中
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]if settings.DEBUG:
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]文件“/usr/local/myproject4/env/lib/python2.7/site packages/django/conf/__init___;.py”,第54行,在__
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]self.\u设置(名称)
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]文件“/usr/local/myproject4/env/lib/python2.7/site packages/django/conf/__init___;.py”,第49行,在安装程序中
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]self.\u wrapped=设置(设置模块)
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]文件“/usr/local/myproject4/env/lib/python2.7/site packages/django/conf/__init__.py”,第128行,在u init中__
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]mod=importlib.import\u模块(自我设置\u模块)
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]文件“/usr/local/myproject4/env/lib/python2.7/site packages/django/utils/importlib.py”,导入模块第40行
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]\uuuuuu import\uuuuuu(名称)
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]文件“/usr/local/myproject4/myproject4/settings.py”,第29行,在
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]SECRET\u KEY=get\u env\u变量('MYPROJECT\u SECRET\u KEY'))
[Wed Nov 20 17:07:08 2013][error][client xxx.xxx.xxx.xxx]文件“/usr/local/myproject4/myproject4/settings.py”,第23行,在get_env_变量中
[2013年11月20日星期三17:07:08][error][client xxx.xxx.xxx.xxx]raise配置不当(error\u msg)
[Wed Nov 20 17:07:08 2013][error][client xxx.xxx.xxx.xxx]配置不正确:设置MYPROJECT\u SECRET\u KEY环境变量

如果有人能帮我找出我做错了什么,我将不胜感激。

我需要同样的功能来处理prod/dev环境。。。并发现以下文章:

我刚试过,马上就成功了。请注意以代码为前缀的处理程序名称:

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

好吧,这个错误是关于
myproject\u SECRET\u KEY
,而您似乎没有在Apache配置中设置它。是的,很抱歉,我修改了代码中的变量名,试图简化问题(产生相反的影响)。我会编辑它。