[python] [django] [mod_pyth on] [apache] 再次质疑Django+Mod_python 时对环境变量的处理
"憨狗" <[email protected]>
| Newsgroups | gmane.comp.python.chinese |
|---|---|
| Message-ID | <[email protected]> |
今天在升级一个django开发的系统到V2的时候,发现~/无法正确的展开成
/home/hackgou.(apache是以hackgou帐号执行的,)也不会展开成/root(apache是以root启动的)
觉得非常奇怪,就算是用os.path.expanduser('~/')也无济于事。
于是怀疑是os.envrion['HOME']不对,因为expanduser是需要这个变量来展开~/的。
于是使用setenv HOME /home/hackgou/
可是也不工作,后来在django/core/handlers/modpython.py的ModPythonHandler中
发现Django开发组已经注意到,mod_python不理会apache的setENV指令:
# mod_python fakes the environ, and thus doesn't process
SetEnv. This fixes that
os.environ.update(req.subprocess_env)
但是这个和SetEnv DJANGO_SETTINGS_MODULE app.settings
自相矛盾矛盾,真晕,自己不设置正确的,也不搭理管理员指定的,怎么办?
后来在http://code.google.com/p/modwsgi/wiki/ApplicationIssues找到一些类似的情况,
提到sudo的时候有bug,会导致HOME和root启动的HOME不一样,太好了,我就要这样的bug。
设置hackgou账号的sudo权限,然后用sudo来启动apache,果然所有的expanduser('~/')都顺利。
除此之外, 文中提到
import os, pwd
os.environ["HOME"] = pwd.getpwuid(os.getuid()).pw_dir
这样的代码,似乎可以解决这个问题,神啊,我很反感这种做法:
1.django中似乎没有地方可以放置这样的需要这个APP都需要的代码,我的DRY啊
2.Django修改环境变量似乎成了习惯,之前碰到个TIME_ZONE的问题,就是因为修改了APACHE的环境变量,导致
别的应用环境受到污染,要知道一个apache进程是很多应用共享的,
除了Djano还有别的应用,比如别的Django应用或者PHP,都有可能在一个相同的APACHE进程空间中处理,
说有可能是因为apache本身的一些设置会出现这些差别,跟py没有关系,
这样会导致他们的工作环境受到污染。这似乎没有好的方法可以解决这个问题,
对Django或者说对mod_python 的这种拖泥带水的做法感觉非常的不爽。
也不知道有没有更好的更彻底的解决方法?
如果谁知道,能够告诉我那是最好不过的了
--
关注LAMP平台、安全、及web开发的个人blog: http://hackgou.itbbq.com
PGP KeyID: hackgou#Gmail.com
PGP KeyServ: subkeys.pgp.net
_______________________________________________
python-chinese
Post: send [email protected]
Subscribe: send subscribe to [email protected]
Unsubscribe: send unsubscribe to [email protected]
Detail Info: http://python.cn/mailman/listinfo/python-chinese