如何在子网址部署Django应用?
我需要搭建一个可以在互联网上公开访问的django开发环境(这是为了学校的项目,我的教授需要能看到这些项目,所以这个环境不需要太多安全措施)。我有一台运行Ubuntu 8.04 LTS的虚拟服务器。
我需要在我的主网站的子目录下运行多个django应用。也就是说,我希望mysite.com是一个静态页面,mysite.com/wordpress是我的wordpress博客,而mysite.com/django1、mysite.com/django2等则是我的django项目。
我正在使用apache服务器,并且会使用sqlite或mysql作为数据库。
安装和配置django的方法有很多,几乎和提供建议的网站数量一样多,而且大多数都假设只有一个项目会作为网站的根目录。我非常希望能得到一些帮助,谢谢。
2 个回答
这篇博客解释了一个解决方案(假设使用的是mod_wsgi,在nginx/uwsgi下解决方案类似,显然在nginx/uwsgi下这不是必需的)。
WSGIScriptAlias的第一个参数 - /sub-url
会从请求的URL中去掉,剩下的部分会传给你的Django应用。如果你的Django应用的所有URL都以/sub-url
开头(而这些会被mod_wsgi去掉),那么你就无法在这些URL上显示视图,除非你把/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文件中,所有的URL都必须以你感兴趣的子URL为前缀。
最后,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中明确设置“子URL”,相应的请求路径修补必须在Django框架内进行。
你可以在你的
WSGIScriptAlias /django1 /home/keratacon/www/django1/wsgi.py
WSGIScriptAlias /django2 /home/keratacon/www/django2/wsgi.py
中使用这个,前提是你的 wsgi.py
是你 wsgi 脚本的名字,另外你需要在apache+mod_wsgi 配置中设置好。