django部署成功


                                                                                                                                                经过两天来的不断尝试,并且参考了网络上很多的资料,终于在今天晚上,快要崩溃的时候成功了!记录下来,作教参。
一、先介绍工作环境。
1、python2.5.1安装在d:\python25;
2、django svn版本;
3、工程父目录f:/srv/django; 在其目录下,f:\srv\django> django-admin.py startproject oldexam,生成工程oldexam;
4、选用wampserver套件提供apache和MySQL;安装在d:\wamp;
5、在apache站点上下载mod_python-3.3.1.win32-py2.5-Apache2.2.exe.注意下载对应python和apach的版本号。
二、工程已经使用django自带开发用服务器调试通过,现在要布置到apache生产环境中
我使用了apache的虚拟主机方式;用文本编辑器打开http.conf文件(apache的配置文件,在其中添加)
1、手工添加LoadModule python_module modules/mod_python.so;
2、因为要用到虚拟主机且其中的别名,所以反注释掉如下一行:
  LoadModule vhost_alias_module modules/mod_vhost_alias.s
3、添加如下代码到http.conf中
               
               
               
               
               
               
               
               
                VirtualHost *:80>
Location "/">
    SetHandler python-program
    PythonPath   "['F:/srv/django','F:/srv/django/oldexam',
   'd:/python25/lib/site-packages',
    'd:/python25/lib/site-packages/django/bin'] + sys.path"
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE oldexam.settings
    PythonAutoReload Off
    PythonInterpreter oldexam
    PythonDebug On
/Location>
Alias "/media" "D:/Python25/Lib/site-packages/django/contrib/admin/media"
Location "/media/">
    SetHandler None   
/Location>
Alias "/site_media" "F:/srv/django/oldexam/media"
Location "/site_media/">
    SetHandler None   
/Location>
LocationMatch "\.(jpg|gif|png|txt|ico|pdf|css|jpeg)$">
    SetHandler None
/LocationMatch>
/VirtualHost>
三、简单解释下
1、中,Location指的是url的根,在这里就是指的http://localhost/,则调用django.core.handlers.modpython,
PythonPath需要把工程父目录路径加入;
更详细的介绍参见网络上相关资料。没有使用网络上介绍的,这样就不用每次访问url都为http://localhost/mysite;
2、Alias把路径路映射到具体目录,注意是绝对路径,且绝对路径的最右边都没有/闭合
可以理解为html页面中的href中的链接映射,不知道理解的对不对,欢迎指正;同时下面紧接着,注意这里是闭合的,并且SetHandler设为None,说明这些静态文件不需要使用django处理器来处理;
3、我设置到这里以后,可以访问http://localhost/admin/,但是没有加载样式表,为了能加载样式表,图标等,需要LocationMatch> 匹配满足条件的url且声明不使用django处理器;这其中"\.(jpg|gif|png|txt|ico|pdf|css|jpeg)$" 是匹配表达式,具体意思为后缀名为.jpg,.gif, .png.....等静态文件都是满足匹配的,尤其是.css一定要有,我最开始按照网络教程来做的,没有这个,一直无法加载样式表,后来想到加上试试,成功了4、oldexam.settings.py文件中有几个目录路径需要改为其实的绝对路径
               
               
               
                MEDIA_ROOT = 'F:/srv/django/oldexam/media'
ADMIN_MEDIA_PREFIX =     'D:/Python25/Lib/site-packages/django/contrib/admin/media/'
TEMPLATE_DIRS = ('F:/srv/django/oldexam/templates',)其他自定义的全局变量路径,都要使用绝对路径。
成功访问后,apache的日志文件,其中还有几个错误,以后再研究
[Sun Jan 06 23:17:05 2008] [notice] Apache/2.2.4 (Win32) PHP/5.2.4 configured -- resuming normal operations
[Sun Jan 06 23:17:05 2008] [notice] Server built: Jan 9 2007 23:17:20
[Sun Jan 06 23:17:05 2008] [notice] Parent: Created child process 12876
[Sun Jan 06 23:17:05 2008] [error] python_init: Python version mismatch, expected '2.5', found '2.5.1'.
[Sun Jan 06 23:17:05 2008] [error] python_init: Python executable found 'D:\\wamp\\apache2\\bin\\httpd.exe'.
[Sun Jan 06 23:17:05 2008] [error] python_init: Python path being used 'C:\\WINDOWS\\system32\\python25.zip;D:\\Python25\\Lib;D:\\Python25\\DLLs;D:\\Python25\\Lib\\lib-tk;;D:\\wamp\\apache2\\bin'.
[Sun Jan 06 23:17:05 2008] [notice] mod_python: Creating 8 session mutexes based on 0 max processes and 250 max threads.
[Sun Jan 06 23:17:06 2008] [notice] Child 12876: Child process is running
[Sun Jan 06 23:17:06 2008] [notice] Child 12876: Acquired the start mutex.
[Sun Jan 06 23:17:06 2008] [notice] Child 12876: Starting 250 worker threads.
[Sun Jan 06 23:17:06 2008] [notice] Child 12876: Starting thread to listen on port 80.
四,winxp上的WampServer启动问题
在winxp上安装wampserver经常遇到apache启动失败的问题,查apache日志,错误为
               
               
               
                [Sun Nov 18 07:23:02 2007] [crit] (OS 10022)提供了一个无效的参数。  : Child 2980: setup_inherited_listeners(), WSASocket failed to open the inherited socket.
[Sun Nov 18 07:23:02 2007] [crit] Parent: child process exited with status 3 -- Aborting.

个错误和netbios有关,暂时的解决办法为,[网络邻居]->右键属性->[本地连接]->右键属性->[TCP/IP]-
>属性->高级->Wins中,改动设定,应用后,再进来改成别的,应用,总之我试的结果是要把设定变下,再重启apache服务就启
动起来了,原因我还不清楚,不过在Win2003上没有这个问题。