一、环境搭配所需程序
介绍:
DJANGO.GZ这是django的ajax插件,有了它就可以实现页面的异步调用了
readline:这个是python依赖的第三方库,很重要
二、部署步骤
说明:先把上面所有安装包上存到服务器然后用命令解压,进入到相关的程序目录下面进行以下步骤:
2.1编译apache
编译方法网上很多,主要是用--prefix来指定安装目录,用各种--enable-XXX来支持模块。
./configure --prefix=/usr/local/apache --enable-so --enable-module=so --enable-mods-shared=all
make
make install
2.2readline安装。
进入rl/readline-5.2目录
./configure
make
make install
23编译python
这里要注意,如果不加上--enable-shared后面的mod-python编译会失败
./configure --enable-shared LDFLAGS=-L/usr/local/bin/ Python-2.7.2
Make
make install
2.4编译mod_python。
有了它请求可转发到python应用。有两个参数是必须指定的,编译中会有个错误,上网搜下即可解决。
./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=/usr/local/bin/python2.7
2.5django dajaxice安装。
三、Django相关配置
我的django安装目录为/usr/local/lib/python2.7/site-packages/ django
3.1 新建django项目
运行:
python /usr/local/lib/python2.7/site-packages/django/bin/django-admin.py startproject mysite
将会在当前路径下创建一个mysite目录及相关的脚本文件。
3.2 配置 Apache
让apache支持mod_python模块
LoadModule python_module modules/mod_python.so。
编辑配置文件 /usr/local/apache/conf/httpd.conf,在末尾加上:
<Location "/mysite/" >
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonDebug On
PythonPath "['/xxx', '/xxx/mysite'] + sys.path"
</Location>
注意:每次修改此文件都要重新启动apache服务器
/usr/local/apache/bin/apachectl stop (停止)
/usr/local/apache/bin/apachectl restart (重启)
/usr/local/apache/bin/apachectl start (启动)
3.3配置django项目的URLconf
a在mysite目录下新建处理脚本views.py
简单示例:
#coding=gb2312
import sys
import json
import datetime
from django.conf import settings
from django.http import HttpResponse
from django.shortcuts import render_to_response
def DJG_GetCurrentDatetime(request):
current_time = datetime.datetime.now()
current_timezone = settings.TIME_ZONE
return HttpResponse("DateTime[%s],TimeZone[%s]" % (current_time,current_timezone))
b、编辑URLconf
打开mysite目录下的urls.py编辑。
导入上述自定义模块mysite.views,然后编辑urlpatterns:
from mysite.views import *
urlpatterns = patterns('', url(r'^mysite/time/$',DJG_GetCurrentDatetime),)
c、重启Apache,查看效果
服务器执行 /usr/local/apache/bin/apachectl restart,再在浏览器中访问:http://172.25.34.162/mysite/time/(其中172.25.34.162是Apache所在的服务器),
四、出错问题与解决方案
4.1改变避免重启apache
因为mod_python缓存预载入了Python代码,所以当在mod_python上发布django站点时,每次改动都要重启apache,可以在httpd.conf中配置MaxRequestsPerChild 1(直接在最后插入这行即可),强制apache对每个请求都重新载入所有的代码。但是不要在产品服务器上使用这个指令,这会撤销 Django 的特权。
4.2 编译apache时候出现缺乏apr与apr-util
一般系统都是自带的,如果没有自带的话就比较麻烦,需要先安装这些程序包
下载apr-1.3.8.tar.gz和apr-util-1.3.8.tar.gz,(版本不一定是这个,可以下载最新的)
先装apr,
#tar xvf apr-1.3.8.tar.gz
#cd apr-1.3.8
#./configure --prefix=/usr/local/apr-httpd
#make
#make install
然后装apr-util.
#tar xvf apr-util-1.3.8.tar.gz
#cd apr-util-1.3.8
#./configure --prefix=/usr/local/apr-util-httpd --with-apr=/usr/local/apr-httpd
#make
#make install
进入到apache的解压包目录
./configure --prefix=/usr/local/apache --enable-so --enable-module=so --enable-mods-shared=all --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd
(编译的时候改成这句命令)
4.3设置开机自启动服务控制脚本
Apache安装后可通过其安装路径的bin目录下的apachectl脚本控制服务的启动和停止。本例中apache安装在/usr/local/apache-2.2.15,服务控制脚本为:
/usr/local/apache-2.2.15/bin/apachectl
执行下面的命令启动Apache服务:
/usr/local/apache-2.2.15/bin/apachectl start
执行下面的命令停止Apache服务:
/usr/local/apache-2.2.15/bin/apachectl stop
可以简单地把Apache启动命令加到/etc/rc.local文件,让Apache随系统启动而自动启动:
echo "/usr/local/apache-2.2.15/bin/apachectl start" >> /etc/rc.local
4.4 路径问题
一定要清楚知道自己安装的路径在什么地方,特别是在安装python的时候,一定要小心,否则到了后面会很麻烦,如果是不指定路径,一搬会安装到/urs/local/bin/目录下,可以到这个目录查看是否有python2.7.2,如果指定了目录在安装mod_python的时候需要指定--with-python=/usr/local/bin/python2.7(这里是我的默认安装路径,python2.7是一个文件不是目录),如果指定了python的安装目录,python2.7.2一般在安装目录下的lib目录下
4.5 虚拟机问题
前两次安装都在虚拟机上面,使用的nat模式,后来在百度上发现nat模式下不能进行局域网的通信,但8000又说不能使用桥接模式,所以最后还是使用真机来搭建环境
4.6 无法访问
一般情况下这种问题是自己搭建的apache还没有启动,启动一下然后用127.0.0.1访问试试,有显示it works表示成功