我有一个启用了 mod-wsgi 的 apache2 服务器,但是无法获取环境变量 PYTHON_EGG_CACHE。
下面是我的 virtualhost.conf 中的重要几行:
DAV svn
SVNParentPath /var/svn
SVNListParentPath Off
WSGIProcessGroup sites
WSGIApplicationGroup %{GLOBAL}
SetEnv PYTHON_EGG_CACHE /var/trac/eggs
AuthType Basic
AuthName "Restricted SVN"
AuthBasicProvider wsgi
WSGIAuthUserScript /var/trac/cgi-bin/acctmgr_auth.wsgi
Require valid-user
这里是 acctmgr_auth.wsgi:
import os, sys
os.environ['PYTHON_EGG_CACHE'] = PYTHON_EGG_CACHE
from trac.env import open_environment, Environment
acct_mgr = None
def check_password(environ, user, password):
global acct_mgr
# Try loading the env from the global cache, addit it if needed
environ['PYTHON_EGG_CACHE']
env = open_environment(environ['trac.env_path'], use_cache=True)
if acct_mgr is None:
from acct_mgr.api import AccountManager
acct_mgr = AccountManager
if acct_mgr(env).check_password(user, password):
return True
else:
return False
def groups_for_user(environ, user):
return ['']
单曲environ['PYTHON_EGG_CACHE']
只是一次测试,但我得到了
密钥错误:‘PYTHON_EGG_CACHE’
。
我也尝试了以下操作,但收到与上述相同的错误:
RewriteCond ${lowercase:%{REQUEST_URI}} ^/svn/([^/]+)
RewriteRule . - [E=trac.svn_path:/var/trac/envs/%1]
怎么了?
谢谢您的任何建议。
编辑:经过一番研究,我想我找到了问题所在。mod_dav 配置为位置 /svn,它会立即处理请求,因此 rewritecond 和 rewriterule 将被忽略。
是否有可能使用 mod_dav 设置环境变量?
答案1
这是我在 django 网站上的操作,其中路径在 apache 文件中设置(作为 MY_PATH)。请注意,我将其复制到 os.environ 变量中。
import os, sys, django.core.handlers.wsgi
_application = django.core.handlers.wsgi.WSGIHandler()
def application(environ, start_response):
path = environ['MY_PATH']
if path not in sys.path:
sys.path.append(path)
os.environ['MY_PATH'] = environ['MY_PATH']
from django.conf import settings
settings.DEBUG = True
return _application(environ, start_response)
由于我将环境变量复制到了 os.environ,因此我现在可以在设置文件中使用它(例如)。请注意,os.environ
在包含设置之前,我已经设置了所有变量。在设置中,我得到的结果如下:
import os
PATH = os.environ['MY_PATH']
答案2
SetEnv
通常仅在使用 CGI 时设置进程环境变量。对于 mod_wsgi,SetEnv
变量进入每个请求的 WSGI 环境而不是进程环境。
因此,它们无法从 WSGI 脚本中的全局范围访问,即使在应用程序可调用中,您也必须从以下位置访问它们:环境字典作为参数传递。
答案3
我通过使用内容找到了解决方案环境['REQUEST_URI']并在 python 文件中检查它。
您可以在这里找到更多详细信息:http://trac-hacks.org/ticket/8525