【发布时间】:2010-09-20 10:07:28
【问题描述】:
我正在尝试在公司内部服务器上设置 Django。 (没有外部连接到 Internet。)
查看服务器设置文档,“Running Django on a shared-hosting provider with Apache”方法似乎最有可能在这种情况下工作。
这是服务器信息:
- 无法安装
mod_python - 没有root权限
- 服务器是 SunOs 5.6
- Python 2.5
- Apache/2.0.46
- 我已经使用 --prefix option 安装了 Django(和 flup)(再次阅读我可能应该使用 --home,但目前它似乎并不重要)
如here 所述,我已将.htaccess 文件和mysite.fcgi 文件添加到我的Web 根目录中。
当我从服务器运行 mysite.fcgi 脚本时,我得到了预期的输出(正确的站点 HTML 输出)。但是,尝试从浏览器访问它时不会。
似乎PYTHONPATH 设置有问题,因为我使用的是前缀选项。
我注意到,如果我从命令行运行 mysite.fcgi 而不设置 PYTHONPATH 环境变量,则会引发以下错误:
prompt$ python2.5 mysite.fcgi
ERROR:
No module named flup Unable to load
the flup package. In order to run
django as a FastCGI application, you
will need to get flup from
http://www.saddi.com/software/flup/
If you've already installed flup,
then make sure you have it in your
PYTHONPATH.
我已将 sys.path.append(prefixpath) 和 os.environ['PYTHONPATH'] = prefixpath 添加到 mysite.fcgi,但如果我设置在命令行中环境变量为空然后运行mysite.fcgi,我仍然得到上述错误。
以下是一些命令行结果:
>>> os.environ['PYTHONPATH'] = 'Null'
>>>
>>> os.system('echo $PYTHONPATH')
Null
>>> os.environ['PYTHONPATH'] = '/prefix/path'
>>>
>>> os.system('echo $PYTHONPATH')
/prefix/path
>>> exit()
prompt$ echo $PYTHONPATH
Null
看起来 Python 正在设置变量 OK,但该变量仅适用于脚本内部。 Flup 似乎以 .egg 文件的形式分发,我的猜测是,至少在通过 --prefix 选项安装时,egg 实现没有考虑os.environ['key'] = value (?) 添加的变量。
我对 .pth 文件不太熟悉,但似乎 easy-install.pth 文件是指向 Flup 的文件:
import sys; sys.__plen = len(sys.path)
./setuptools-0.6c6-py2.5.egg
./flup-1.0.1-py2.5.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sy
s.path[p:p]=new; sys.__egginsert = p+len(new)
看起来它正在做一些时髦的事情,无论如何要编辑它或在我的代码中添加一些东西以便它会发现错误?
【问题讨论】: