最近因为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,之前所有的库都删掉了,所以不得不重新安装,需要准备好如下库。
- 1.setuptools(http://pypi.python.org/pypi/setuptools#files)
- 2.MySQL for Python(http://sourceforge.net/projects/mysql-python/。当然,前提是你机器上已经安装了mysql)
- 3.django(http://www.djangoproject.com/download/)
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,截图如下:
最后,附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下载
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
fatman on #
python manage.py syncdb
这一步报了很多错误
Reply
媚影狐仙 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
逸川 on #
我用的是 WampServer 这个程序建的环境
把 mod_wsgi.so 丢进去以后,在 httpd.conf 里添加
LoadModule wsgi_module modules/mod_wsgi.so
后,发现 apache 无法启动了……请问是不是还需要其他配置啊?
Reply
Dante on #
呃,我没用WampServer,是自己装的,看一下apache的错误log吧,应该能看出来
Reply
逸川 on #
蛋疼的地方在於……折騰了一段時間以後,apache的錯誤log文件沒了……
Reply
Icho on #
域名没有解析成功噢!!只能用127.0.0.1
hosts 文件里面加了如上
127.0.0.1 dante.qq.com 不行
继续检查中
Reply
Icho on #
哈哈 加上这个就有戏了
ServerName php.qq.com
这个是重点MaxRequestsPerChild 1
Reply
Cyiner on #
实在太感谢博主了~这个真的是有用呀~
Reply
xamp on #
再setting.wsgi文件中无法导入os文件?请问楼主是怎么回事呢?
Reply
Dante on #
呃,这个只是这样描述我也不能确定呢。。
Reply
Steve_zhou on #
@Dante,弱问下:
你的DocumentRoot是设置的 d:/dgwww吧?
Reply