[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.