2011-10-28 130 views
3

对于这样一个简单的问题,我非常抱歉 - 我是WSGI开发新手,我很感激您能承受的任何耐心。部署一个Django应用程序

我做了一个Django应用程序;它在开发模式下效果很好。我运行:

python manage.py runserver 

然后直接我的浏览器到127.0.0.1:8000,瞧,有我的应用程序。

从这里我绝对不能弄清楚如何在生产模式下运行我的应用程序。我已阅读了多个页面like thisand this和其他几个StackOverflow。但我不知道甚至可以指导我的浏览器查看我的页面是否正常工作。

我已经安装了apache2mod_python等,但我认为这个问题是我的误解是在这样一个更基本的层面。当我过去完成CGI程序时,我用一个调用cgi-bin/file.cgi的窗体将我的浏览器指向webroot/file.html,该窗体生成html输出。我不知道我应该导航到.wsgi页等

在那我应该来导航到一个.wsgi file,我也试着使包含文件的假设:

import os 
import sys 

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

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

path = '/home/orserang/nonparametric-protein/src/www/mysite$' 
if path not in sys.path: 
     sys.path.append(path) 

,并添加

WSGIScriptAlias//path/to/mysite/apache/django.wsgi 

apache2/httpd.conf文件,这样它的内容是:

<Location "/mysite/"> 
    SetHandler python-program 
    PythonHandler django.core.handlers.modpython 
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings 
    PythonOption django.root /mysite 
    PythonDebug On 
    PythonPath "['/home/orserang/nonparametric-protein/src/www/mysite'] + ['/home/orserang/nonparametric-protein/src/'] + sys.path" 
    WSGIScriptAlias /mysite /home/orserang/nonparametric-protein/src/www/mysite/django.wsgi 
</Location> 

但是,当我重新启动apache,它说:

语法上/etc/apache2/httpd.conf的8行错误:
WSGIScriptAlias不在这里

允许鉴于我甚至不知道其中我应该指向我的浏览器去Django wsgi页面,我觉得有一件容易的事,我做得很不对。

也许Django WSGI应用程序需要在后台运行,它将监听请求(而不是通过apache)?

与部署文档相比,仅在视图和数据库上的在线Django文档相当丰富;因此,我最好的猜测是,这是一件很简单的事情。

非常感谢您的帮助!

+1

部署到现场服务器(根据您的服务器)绝非易事,但我不清楚你在问什么。你是在寻找一步一步的部署指南,还是有一个特定的领域,你挂断了? –

+0

@DanielNill我充实了这个问题;我甚至不知道在哪里指向我的浏览器(我的Django项目没有单独的文件,将'cgi'启动其他文件)。当我试图按照文档指示创建'.wsgi'文件时,'apache'启动失败。 – user

回答

1

Django Book 2.0对此有一个概述。这不是通常与Django文档:

Chapter 12: Deploying Django

查看“使用Django在Apache和mod_python”一节。

+0

我犯了很多错误 - 但我认为最大的不是实际上在服务器上创建了一个名称为Django的应用程序(我认为只要它有一些字符串指向正确的位置,它就会工作,但我相信那里是需要知道Django应用程序在哪里的注册表)。感谢您的耐心和帮助! – user

1

你在混合使用mod_python和mod_wsgi部署方法。摆脱Location指令中的所有内容,但WSGIScriptAlias行除外。

+2

添加摆脱位置指令以及。 WSGIScriptAlias不应位于位置或目录指令中。他们应该拥有自己的WSGIScriptAlias产品线。 –

1

我写了部署在Apache用于Linux的Django项目shell脚本,

https://github.com/mukulu/shell-scripts/blob/master/deploy-django.sh

你只需要配置几个变量的代码第一线, ,它会找出休息。

它几乎检查并安装django的依赖关系,编写部署项目并重新启动服务器的apache配置。

我打算给它的蟒蛇重新写(我写的匆忙) 随意重新使用。

变量是:

SITE_PREFIX="/djangoproject" 

MEDIA_URL="/media" 

ADMIN_MEDIA_PREFIX="/static/admin/" 

MEDIA_ROOT="" 

DJANGO_VERSION="1.3.1" 

APACHE2_CONFIG="/etc/apache2/conf.d"  #Apache configurations directory in yoru system. 
+0

+1听起来不错。也许这对社区wiki有好处? – user