【问题标题】:How to deploy Django application at sub-url?如何在子 url 部署 Django 应用程序?
【发布时间】:2010-01-09 20:40:32
【问题描述】:

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

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

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

安装和配置 django 的方法似乎与提供建议的网站一样多,而且所有网站都假设一个项目将成为网站的根目录。非常感谢您的帮助,谢谢。

【问题讨论】:

    标签: python django apache


    【解决方案1】:

    你可以使用

    WSGIScriptAlias /django1 /home/keratacon/www/django1/wsgi.py
    WSGIScriptAlias /django2 /home/keratacon/www/django2/wsgi.py
    

    在您的apache+mod_wsgi config 中,假设wsgi.py 是您的wsgi 脚本的名称。

    【讨论】:

      【解决方案2】:

      This blog 解释解决方案(假设使用 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 必须和你的 sub-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的定义,如第一个代码sn-p所示。

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

      【讨论】:

      • 那些 SCRIPT_NAME 和 PATH_INFO 小提琴不应该是 Django 1.0 以后的必需品。只有旧 Django 版本才需要它们。如果你还在用这个,那你就做错了。
      • 嗯,我试图在 Django 文档中找到它,但无法...也许看错了地方。
      • 最初描述小提琴的地方是code.google.com/p/modwsgi/wiki/IntegrationWithDjango。它从未在 Django 文档中描述过。它说修复程序包含在 Django 1.0 中,因此不需要小提琴。
      猜你喜欢
      • 2015-12-15
      • 2013-06-19
      • 2015-01-06
      • 1970-01-01
      • 2012-03-16
      • 2012-09-02
      • 2011-12-05
      相关资源
      最近更新 更多