论坛首页 编程语言技术论坛

Django项目production环境发布笔记。

浏览 9640 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-05   最后修改:2009-02-05
这里使用apache2 + mod_python, 安装忽略, 另外需要到你部署的机子上安装django 和 MySQLdb,(我用的ubuntu server,装上之后 apache2, mod_python, MySQLdb 都已经有了, 装个django就好了。 )


其实配置蛮简单的, 修改/etc/apache2/httpd.conf, 加入以下片段。

Alias /site_media /home/denny/zoomino/website/zoomino_media

<Location "/">
      SetHandler python-program
      PythonHandler django.core.handlers.modpython
      SetEnv DJANGO_SETTINGS_MODULE zoomino.settings
 #    PythonOption django.root /
      PythonDebug On
      PythonPath "sys.path +['/home/denny']"
</Location>

<Location "/site_media">
      SetHandler None
</Location>


项目位于/home/denny,这里要注意PythonPath, 这里不是设置/home/denny/zoomino而且project dir的上一级目录, 也就是你运行django-admin.py startproject的当前目录。如果你想在开发的时候自动定位你的template dir,请看这篇文章http://dengyin2000.iteye.com/blog/323391

django虽然把可以处理静态文件,但是django内置的web server很差,所以发布的时候需要用apache这样的handle。Alias /site_media /home/denny/zoomino/website/zoomino_media 这句定义资源文件的路径和映射的url。

然后我们把django项目映射到根url“/”上。 因为我把django映射到了根上, 所以最后一段肯定要加,要不然资源文件会被django handle了那肯定是要报错的。

OK,最后把settings.py的DEBUG设成False, 重启apache就行了。


如何在开发的时候处理静态文件请看。 http://docs.djangoproject.com/en/dev/howto/static-files/#howto-static-files, 再结合我的这篇文章http://dengyin2000.iteye.com/blog/323391定位你的static files就完美了。


参考:http://docs.djangoproject.com/en/dev/topics/install/#database-installation
      http://docs.djangoproject.com/en/dev/intro/install/#intro-install
      http://docs.djangoproject.com/en/dev/howto/deployment/modpython/#howto-deployment-modpython

安装apache mod-python

http://www.howtoforge.com/embedding-python-in-apache2-with-mod_python-debian-ubuntu-fedora-centos-mandriva-opensuse
   发表时间:2009-02-05  
赞,不过用nginx效率或许会高一些?

其实django的部署我看好mod_wsgi。wsgiMS比apache module设计合理一些。。。

所以无论是nginx的mod_wsgi或者是apache的mod_wsgi都可以试试看。。。
0 请登录后投票
   发表时间:2009-02-05  
把django以fastcgi的形式部署在lighttpd下面,链接的跳转会出现很诡异的问题,如果一个链接 是/post/1/可以正常跳转,但是如果写成/post/1 那么就会跳转到 /mysite.fcgi/post/1 那么当然是404了
有时候在admin下的操作老是会跳到 /mysite.fcgi/xxxxx/xxx,比如说我一个增加的操作以后,应该跳到 /admin/post/1 结果是跳到 /mysite.fcgi/admin/post/1 就是404
更奇怪的是,我在同样的配置,在linux下面只是在管理后台登陆的时侯这样跳转,其它时侯并不。但是在windows下面竞然很多链接会这样跳,都是增加操作。完全没有道理。
有谁遇见过这样的问题。

$HTTP["host"] == "202.109.130.80" {
        server.document-root="/home/vansention/workspace/soft/"
        fastcgi.server = (
            "/mysite.fcgi"=>(
                "main"=>(
                "host" =>"127.0.0.1",
                "port" => 3303,
                "check-local"=>"disable"
                )
            ) ,
        )
        alias.url += (
                "/media/" => "/usr/lib/python2.5/site-packages/django/contrib/admin/media/",
                "/static/" => "/home/vansention/workspace/soft/static/"
        )
        url.rewrite-once = (
        "^(/media.*)$" => "$1",
        "^(/static.*)$" => "$1",
        "^/favicon\.ico$" => "/media/favicon.ico",
        "^(/.*)$" => "/mysite.fcgi$1",
    )
}
0 请登录后投票
   发表时间:2009-02-05  
范三山 写道
把django以fastcgi的形式部署在lighttpd下面,链接的跳转会出现很诡异的问题,如果一个链接 是/post/1/可以正常跳转,但是如果写成/post/1 那么就会跳转到 /mysite.fcgi/post/1 那么当然是404了
有时候在admin下的操作老是会跳到 /mysite.fcgi/xxxxx/xxx,比如说我一个增加的操作以后,应该跳到 /admin/post/1 结果是跳到 /mysite.fcgi/admin/post/1 就是404
更奇怪的是,我在同样的配置,在linux下面只是在管理后台登陆的时侯这样跳转,其它时侯并不。但是在windows下面竞然很多链接会这样跳,都是增加操作。完全没有道理。
有谁遇见过这样的问题。

$HTTP["host"] == "202.109.130.80" {
        server.document-root="/home/vansention/workspace/soft/"
        fastcgi.server = (
            "/mysite.fcgi"=>(
                "main"=>(
                "host" =>"127.0.0.1",
                "port" => 3303,
                "check-local"=>"disable"
                )
            ) ,
        )
        alias.url += (
                "/media/" => "/usr/lib/python2.5/site-packages/django/contrib/admin/media/",
                "/static/" => "/home/vansention/workspace/soft/static/"
        )
        url.rewrite-once = (
        "^(/media.*)$" => "$1",
        "^(/static.*)$" => "$1",
        "^/favicon\.ico$" => "/media/favicon.ico",
        "^(/.*)$" => "/mysite.fcgi$1",
    )
}

说实话,我在玩django的时候也出现了这个问题。

我分析是这样的,不带/的地址会被lighttpd返回301,然后重新请求,但是这个时候lighttpd返回给浏览器的地址是这样的/mysite.fcgi/xxxxx/xxx,为什么是这个地址,因为之前"^(/.*)$" => "/mysite.fcgi$1",这句导致重定向的地址变成了/mysite.fcgi/xxxxx/xxx,而不是在原来的地址后加一个/这么简单,所以我觉得比较好的方案是破坏lighttpd对默认没有/的地址返回301状态的行为。
比如没有/的urlrewrite一下自动加上/
0 请登录后投票
   发表时间:2009-02-06  
没有试过lighthttpd   其实用apache也蛮方便的嘛。 性能差距有这么大吗?

0 请登录后投票
   发表时间:2009-02-06  
dengyin2000 写道
没有试过lighthttpd   其实用apache也蛮方便的嘛。 性能差距有这么大吗?



apache 配集群方便么
0 请登录后投票
   发表时间:2009-02-06  
呵呵 不错 收藏 过一阵要用这个
0 请登录后投票
   发表时间:2009-02-06  
剑 事 写道
dengyin2000 写道
没有试过lighthttpd   其实用apache也蛮方便的嘛。 性能差距有这么大吗?



apache 配集群方便么


apache集群肯定方便吧。 前面一个loadblance就是了。 django是SNA的, session又不用复制。
0 请登录后投票
   发表时间:2009-02-08  
django部署实在麻烦了点
0 请登录后投票
   发表时间:2009-02-08  
范三山 写道

django部署实在麻烦了点

其实应该还好吧, 主要一步就是要把静态资源也需要部署。不过比起java的一个war包稍微麻烦点了。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics