django部署成功
MotsQueen
|
1#
MotsQueen 发表于 2008-01-06 22:25
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上没有这个问题。 |