如何在sub-url部署Django应用程序?

时间:2010-01-09 20:40:32

标签: python django apache

我需要建立一个可在互联网上公开查看的django开发环境(我在学校这样做,我的项目需要由我的教授查看,这不是一个需要很多安全性的设置)。我有一个运行Ubuntu 8.04 LTS的虚拟服务器。

我需要在我的主站点的子目录中运行多个django应用程序。也就是说,我需要mysite.com作为静态页面,mysite.com/wordpress是我的wordpress博客,mysite.com/django1 mysite.com/django2等是django项目。

我正在使用apache,我将使用sqlite或mysql。

似乎有许多不同的方法来安装和配置django,因为有网站提供建议,并且所有这些方法都假定单个项目将成为网站的根。我非常感谢你的帮助,谢谢你。

3 个答案:

答案 0 :(得分:3)

您可以使用

WSGIScriptAlias /django1 /home/keratacon/www/django1/wsgi.py
WSGIScriptAlias /django2 /home/keratacon/www/django2/wsgi.py
在您的apache+mod_wsgi config

,假设wsgi.py是您的wsgi脚本的名称。

答案 1 :(得分:0)

Django文档有一个描述deployment on Apache的页面。还有一个关于运行multiple installations on the same server

的部分

答案 2 :(得分:0)

This blog解释了解决方案(假设使用mod_wsgi,与nginx / uwsgi,解决方案类似显然在nginx / uwsgi中这不是必需的。)

WSGIScriptAlias的第一个参数 - /sub-url将从请求网址中删除,其余的将转到您的django应用程序。如果您的Django应用程序网址都以/sub-url开头(由mod_wsgi删除),那么您将无法在这些网址上显示视图,除非您“重新插入”/sub-url到请求路径部分。

import django.core.handlers.wsgi

_application = django.core.handlers.wsgi.WSGIHandler()
def application(environ, start_response):
    #the line below will re-append the sub-url to all urls
    environ['PATH_INFO'] = environ['SCRIPT_NAME'] + environ['PATH_INFO']
    #this one will make django think that it's the only thing running on the server
    environ['SCRIPT_NAME'] = '' # my little addition to make it work
    return _application(environ, start_response)

同样在您的urls.py中,所有网址都必须以您感兴趣的子网址为前缀。

最后,WSGIScriptAlias必须与子url相同:

#the below line will "take-out" the sub-url and pass the rest
#to your wsgi script
WSGIScriptAlias /sub-url /path/to/wsgi_script

文件/path/to/wsgi_script必须包含application的定义,如第一个代码段所示。

为了在Django中使“sub-url”设置显式化,必须在Django框架内进行等效的请求路径修补。