最后更新于 .

最近因为python升级到了2.7导致mod_python不能用,所以自己电脑上的apache一直启动不起来,趁着周末有时间,抓紧搞一下。 在网上搜了一下,发现mod_python已经停止维护了,而替代他的是mod_wsgi,下载路径如下: http://code.google.com/p/modwsgi/downloads/list 挑选For 2.7的版本下载,改名成mod_wsgi.so,然后扔到apache的modules目录就可以了。 在apache的conf文件中加入:

LoadModule wsgi_module modules/mod_wsgi.so

OK,但是我们真正的安装才刚刚开始。 刚才说过由于python升级到2.7,之前所有的库都删掉了,所以不得不重新安装,需要准备好如下库。

setuptools和django都好说,关键出在了MySQL for Python上,官网上的版本是不支持python2.7的。即使你拿他的source回来在mingw下编译(python setup.py build --compiler=mingw32),也会报如下错误而无法继续:

gcc: /Zl: No such file or directory

不过万幸的事,居然有好心人帮我们把这些库都已经编译好了,页面如下: http://www.lfd.uci.edu/~gohlke/pythonlibs/ 不仅有MySqlPython For python2.7,还有很多其他的类库,是个很不错的地方~~ 一切安装完毕之后,就是django的配置了。 1)我们通过python-admin.py创建一个project: 在D:\dgwww目录执行:

python C:\Python27\Lib\site-packages\django\bin\django-admin.py startproject mysite

然后在D:\dgwww下分别创建js,media,conf三个目录,在conf下创建文件setting.wsgi,内容如下:

import os 
import sys 
sys.stdout = sys.stderr 
from os.path import abspath, dirname, join 
from django.core.handlers.wsgi import WSGIHandler 
sys.path.insert(0, abspath(join(dirname(__file__), "../"))) 
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" #your settings module 
application = WSGIHandler()

至此,整体目录结构如下:

/dgwww/ 
|~conf/ 
| `-setting.wsgi 
|~js/ 
|~media/ 
`~mysite/ 
  |-__init__.py 
  |-__init__.pyc 
  |-manage.py 
  |-settings.py 
  |-settings.pyc 
  |-urls.py 
  `-urls.pyc

2)修改setting.py、urls.py 在setting.py中修改:

ADMIN_MEDIA_PREFIX = '/admin_media/' 
MEDIA_URL = '/site_media/'

并去掉django.contrib.admin的注释 在urls.py中: 去掉如下注释:

from django.contrib import admin 
admin.autodiscover() 
(r'^admin/', include(admin.site.urls)),

并执行:

python manage.py syncdb

3)修改httpd.conf 添加NameVirtualHost:

NameVirtualHost *

添加虚拟域名,并配置如下:

 
    ServerName dante.qq.com 
    WSGIScriptAlias / D:/dgwww/conf/setting.wsgi 
     
        Options FollowSymLinks 
        AllowOverride 
        Order allow,deny 
        Allow from all 
     
     
        Order Deny,Allow 
        Deny from all 
     
    Alias /admin_media "C:\Python27\Lib\site-packages\django\contrib\admin\media" 
     
        Order allow,deny 
        Options Indexes 
        Allow from all 
        IndexOptions FancyIndexing 
     
    #AliasMatch /js/(.*\.(js)) D:/dgwww/js/$1 
    Alias /js D:/dgwww/js/ 
     
        Order allow,deny 
        Options Indexes 
        Allow from all 
        IndexOptions FancyIndexing 
     
      
    #AliasMatch /site_media/(.*\.(css|gif|png|jpg|jpeg)) D:/dgwww/media/$1 
    Alias /site_media D:/dgwww/media/ 
     
        Order allow,deny 
        Options Indexes 
        Allow from all 
        IndexOptions FancyIndexing 
     

这里有个地方让我迷惑了好久,即Alias的时候,前面的参数最后是不能带/的,如/admin_media,不能写成/admin_media/,否则会失效。 4)修改host文件:

127.0.0.1 dante.qq.com

访问dante.qq.com/admin,截图如下:
dadmin 最后,附httpd.conf,setting.py,setting.wsgi下载。 ------------------------------------------------------------------------------ linux下的部署 linux的mod_wsgi是需要编译的,命令如下:

./configure --with-apxs=/home/dantezhu/apache/bin/apxs --with-python=/usr/bin/python
make && make install

一个典型httpd.conf的配置如下:

NameVirtualHost *:9010
Listen 10.6.207.119:9010

 
    ServerName fuload.qq.com
    WSGIScriptAlias / /home/dantezhu/htdocs/fuload/conf/setting.wsgi
     
        Options FollowSymLinks 
        AllowOverride
        Order allow,deny 
        Allow from all 
     
     
        Order Deny,Allow 
        Deny from all 
     
    Alias /admin_media "/usr/local/lib/python2.7/site-packages/django/contrib/admin/media"
    
        Order allow,deny 
        Options Indexes
        Allow from all 
        IndexOptions FancyIndexing
    
    #AliasMatch /js/(.*\.(js)) /home/dantezhu/htdocs/fuload/js/$1 
    Alias /js /home/dantezhu/htdocs/fuload/js/
    
        Order allow,deny 
        Options Indexes
        Allow from all 
        IndexOptions FancyIndexing
    

    #AliasMatch /site_media/(.*\.(css|gif|png|jpg|jpeg)) /home/dantezhu/htdocs/fuload/media/$1 
    Alias /site_media /home/dantezhu/htdocs/fuload/media/
    
        Order allow,deny 
        Options Indexes
        Allow from all 
        IndexOptions FancyIndexing
    

生成project的命令如下:

python /usr/local/lib/python2.7/site-packages/django/bin/django-admin.py  startproject mysite

附:linux下的httpd.conf下载

Pingbacks

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. Dante

    Dante on #

    刚发现用
    MaxRequestsPerChild 1
    来使修改不重启apache生效,在mod_wsgi下貌似也一样可以用,不过貌似不怎么稳定。
    另外,发现了一篇文章讲mod_wsgi的两种模式:
    http://ssmax.net/archives/977.html
    不过第二种模式在windows下模式启动不了:
    找到的问题贴的链接是:
    http://osdir.com/ml/DjangoUsers/2009-07/msg01764.html

    原文如下:
    And if it isn't that, be aware that daemon mode isn't available for
    the following:

    1. Windows.
    2. Apache 1.3 on UNIX
    3. Apache 2.X where the underlying Apache Runtime Libraries are not
    built with thread support.

    Number 3 is still sometimes the case on BSD systems. Note that 3 has
    got nothing to do with prefork MPM. If the APR has thread support,
    even if you are using prefork MPM, you can still use daemon mode.

    Reply

  2. fatman

    fatman on #

    python manage.py syncdb

    这一步报了很多错误

    Reply

    1. 媚影狐仙

      媚影狐仙 on #

      是的,楼主的settings.py少配了数据库的相关内容。
      你需要将settings.py中的
      DATABASES = {
      ...
      }
      修改为你设定的库。
      我是用Mysql, 给你个参考:
      DATABASES = {
      'default': {
      'ENGINE': 'mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
      'NAME': 'apathon_site', # Or path to database file if using sqlite3.
      'USER': 'root', # Not used with sqlite3.
      'PASSWORD': 'sa', # Not used with sqlite3.
      'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
      'PORT': '3306', # Set to empty string for default. Not used with sqlite3.
      }
      }

      注意, name 是数据库名, 如果你的数据库中没有需要重新create一个。

      Reply

  3. 逸川

    逸川 on #

    我用的是 WampServer 这个程序建的环境
    把 mod_wsgi.so 丢进去以后,在 httpd.conf 里添加
    LoadModule wsgi_module modules/mod_wsgi.so
    后,发现 apache 无法启动了……请问是不是还需要其他配置啊?

    Reply

    1. Dante

      Dante on #

      呃,我没用WampServer,是自己装的,看一下apache的错误log吧,应该能看出来

      Reply

      1. 逸川

        逸川 on #

        蛋疼的地方在於……折騰了一段時間以後,apache的錯誤log文件沒了……

        Reply

  4. Icho

    Icho on #

    域名没有解析成功噢!!只能用127.0.0.1
    hosts 文件里面加了如上
    127.0.0.1 dante.qq.com 不行
    继续检查中

    Reply

    1. Icho

      Icho on #

      哈哈 加上这个就有戏了

      ServerName php.qq.com

      这个是重点MaxRequestsPerChild 1

      Reply

  5. Cyiner

    Cyiner on #

    实在太感谢博主了~这个真的是有用呀~

    Reply

  6. xamp

    xamp on #

    再setting.wsgi文件中无法导入os文件?请问楼主是怎么回事呢?

    Reply

    1. Dante

      Dante on #

      呃,这个只是这样描述我也不能确定呢。。

      Reply

  7. Steve_zhou

    Steve_zhou on #

    @Dante,弱问下:

    你的DocumentRoot是设置的 d:/dgwww吧?

    Reply

发表评论