将django部署到UserDir

时间:2009-09-29 07:46:51

标签: python django apache

我想在学生服务器上部署我的django宠物项目。我们有UserDir mod的apache2,我无法访问apache2配置文件。我该如何部署? :-D

我来自PHP背景,我通过将我们的PHP脚本上传到我的public_html目录来部署我的PHP脚本,所有内容都显示在http://ourserver.com/~myusername上。我读了django文档,它说我应该将<Location>some stuff</Location>添加到我们的apache配置文件中。我无法访问它,所以我尝试将它放在我的public_html目录中的.htaccess中,但是没有用。我google了很多,我想我读到的地方你不能把<Location>放进.htaccess,但现在我找不到那个引用。

那么,这里有人在没有骚扰apache管理员的情况下将django部署到UserDir吗?

修改 我测试了mod_python作为Graham Dumpleton建议here,我可以毫无问题地使用mod_python。此外,我发现错误日志,这是我将<Location>some stuff</Location>放入.htaccess时错误日志所说的内容:

"[Thu Oct 01 21:33:19 2009] [alert] [client 188.129.74.66] /path/to/my/.htaccess: <Location not allowed here"

所以,似乎我真的不能把<Location>放进.htaccess。那么,我的选择是什么?

5 个答案:

答案 0 :(得分:1)

如果安装了mod_python,首先看看你是否可以实际使用它,而无需管理员做任何事情。读:

http://www.dscpl.com.au/wiki/ModPython/Articles/GettingModPythonWorking

除非您是受信任的用户或管理员不知道他们在做什么,否则他们不应该允许您使用mod_python,因为您的代码将以Apache用户身份运行,如果其他人也以相同的方式运行应用程序,您可以干扰彼此的应用程序和数据。换句话说,它不安全,不应该在同一个Apache实例上有多个用户的共享托管环境中使用。


更新1

基于你现在有mod_python工作,你应该能够用以下内容替换mptest.py的内容:

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import sys
sys.path.insert(0, '/some/path/to/project/area/mysite')
sys.path.insert(0, '/some/path/to/project/area')

from django.core.handlers.modpython import handler as _handler

def handler(req):
  req.get_options()['django.root'] = '/~myusername/mptest.py'
  return _handler(req)

显然,应根据您的命名更改其中的各种路径和值。

该网站将以“/〜myusername/mptest.py”的形式访问。

此时你会发现使用mod_python是愚蠢的,你无法控制Apache。这是因为当您更改站点中的代码时,您需要让管理员为您重新启动Apache,以便您接收更改。

在守护进程模式下使用mod_wsgi作为守护进程的所有者会好得多,但是如果他们已经在运行mod_python我不会建议他们同时加载两个模块,因为mod_python问题搞砸了mod_wsgi的使用在某些情况下,如果他们没有正确安装Python,你可能会遇到很多问题,所以不值得麻烦。

简而言之,在无法控制Apache的共享托管环境中使用mod_python是愚蠢和不安全的。

同样,已经记录了如何从每个用户目录中运行Django,因为我认为之前的任何地方都没有记录过。

答案 1 :(得分:0)

基础Apache上是否启用了mod_pythonmod_wsgi?你至少需要这个。

答案 2 :(得分:0)

您是否可以在80以外的某个端口上运行自己的长时间运行的服务器进程?这可能允许您使用Django测试服务器或您自己的Apache副本以及本地配置文件来提供Django内容。

答案 3 :(得分:0)

您是否尝试过使用<Directory>代替<Location>?如果未被本地政策阻止,您应该可以执行以下操作:

<Directory /path/to/your/home/public_html>
# mod_python stuff here
</Directory>

如果您与管理员保持良好关系,我会选择mod_wsgifastcgi。但是,如果是这种情况,您应该只需向管理员提供mod_wsgi配置,因为它支持基于更新的重新加载并以备用用户身份运行。他应该能够将其设置为只在您的帐户下运行一个wsgi文件 - 类似这样,可能使用allow from all,具体取决于安全性的配置方式:

<Directory /home/you/public_html>
WSGIApplicationGroup PROJECT
WSGIDaemonProcess YOU threads=15 processes=2 python-path=/home/YOU/.virtualenvs/PROJECT-env/lib/python2.6/site-packages
WSGIProcessGroup YOUR_GROUP
WSGIScriptAlias / /home/YOU/PROJECT/deploy/PROJECT.wsgi
</Directory>

顺便说一下,上面假设使用了令人敬畏的,高度推荐的virtualenvvirtualenvwrapper来在您的主目录中创建一个本地python沙箱。这将大大简化作为非管理员运行的生活或当您有多个项目时。如果您不使用virtualenv,则可以完全删除上面的python-path

答案 4 :(得分:0)

如果配置了mod_fcgi,您可以使用它。见http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/