windows下apache部署django项目个人总结(备查)

来源:互联网 发布:java访问控制修饰符 编辑:程序博客网 时间:2024/06/05 07:50

// 另一个账号里两年前写的,搬过来合到一个账号里


        要了我的亲命了,配了两三次apache上的django项目了,还是有一些意外的bug,拣出来几个还记得的bug备案,方便下次查询。

        各种查资料,网络上的文章大多对 VirtualHost 没什么说明,导致配置到这个地方总会因为一些理解上的偏差出问题。


按照网络上的情景部署django项目到apache上,因为有多个项目并存在这台服务器上,所以需要使用 VirtualHost 对不同的项目进行划分,这个地方貌似也可以在一个host下划分,具体没有深入研究,之后再关注,先总结分 VirtualHost 下部署项目。

 

下载

mysql-python :点击打开链接

mod_wsgi.so:点击打开链接
python由于我下的版本有点多,结果造成混淆了,装乱了,导致配置时候有些意外,比如两个程序运行在不同的版本python上,有的python没安装django,造成问题,还不宜发现,django默认安装在最新的python上面,请注意
django就下载gz那个包就好,然后python install.py install安装

 
1、遇到的一个很重要的问题 import django.core.handlers.wsgi 这个东西找不到
场景:这个问题是apache的log中显示的,如果restart方式重启,不会报这个问题,先stop,再start就会报出来
解决:这个地方具体原因没有细究,查资料可能是 mod_wsgi.so 这个文件和 apache 或者 python 的版本不对应产生的问题,在官网下载匹配版本的mod_wsgi.so,然后放入Apache下面的modules目录,千万注意名字要与配置apache配置文件中的名字一致,否则会很纳闷问题发生在了哪。apache配置文件httpd.conf中添加的对应内容为:LoadModule wsgi_module modules/mod_wsgi.so   下载地址:http://code.google.com/p/modwsgi/downloads/list?can=1&q=&colspec=Filename+Summary+Uploaded+Size+DownloadCount

由于版本比较多,结果没注意运行在了一个没安装django的python上,报的错跟上面的好像是一样的,说是import 不到wsgi,安装django就好,如果该版本python不是最新的,还要重装一下该版本python,再安装django

还有一个问题,可能比如最新装了python2.7.6,但是实际却不一定运行在了2.7.6上,这个看报错里面到底是用的哪个版本,然后考虑这个版本python是否成功安装了django,然后wsgi.so是否匹配。哎,早知道就先删除2.7.5,再安装2.7.6了


2、apache配置文件中的配置
目录在apache下面的conf文件夹,http.conf就是
2.1 首先记得加上1中的mod_wsgi.so引用,注意同名
2.2 对 / 这个目录权限的设置,某些场景会有访问受限的提示,貌似返回的是403
参照如下设置
<Directory />
     Options FollowSymLinks
    AllowOverride None
    Order deny,allow
     #2014.2.12 andyxzhang 注释掉
     #Deny from all
</Directory>
2.3 设置 VirtualHost 有三点关键,一个是打开对virtualhost的引用,默认是注释掉的
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
当时纳闷为啥配置好了,还是404,不能访问,搞了半天是因为没开这个,太稀里糊涂了

还有就是千万记得加监听 Listen 8080 ,8080是我设置的VirtualHost
默认是监听了80端口,直接访问localhost就可以进入,但是Virtual不能设置80,会有一些冲突,造成报错,也可以修改配置,Virtual设置成80,不过具体涉及到的内容我没研究,前面部署的一台远程服务器,VirtualHost坚挺的就是80,如何实现的不冲突,没深究,这次也没实现

下面是设置VirtualHost

NameVirtualHost *:8080
ErrorDocument 404 /404.html
<VirtualHost *:8080>

    #WSGIScriptAlias /msgpresstest E:\root\website\MsgPressTest\MsgPressTest\wsgi.py

#setting.wsgi名字可以随便起,但是要保持一致
#/msgpresstest 就是访问时的相对url
 WSGIScriptAlias /msgpresstest "E:/root/website/MsgPressTest/setting.wsgi"
#添加访问目录的权限
 <Directory "E:/root/website/MsgPressTest/MsgPressTest">
  AllowOverride None
  Options None
  Order allow,deny
  Allow from all
 </Directory>
#可能不识别html或者python内的一些目录,这样修改,好像也能在setting.wsgi还是wsgi.py中实现,太累了没尝试,稍后尝试了再补充
 Alias /static/ "E:/root/website/MsgPressTest/static/"
 <Directory "E:/root/website/MsgPressTest/static/">
  Options Indexes FollowSymLinks
  AllowOverride None
  Order deny,allow
  Allow from all
 </Directory>

</VirtualHost>

3、配置wsgi.py的时候还发生了一起杯具,报了一个稀奇古怪的错误,具体忘了
原因是下面语句中的引号用的是中文的,非英文的,没识别,这个问题的发现是因为巧合,在一个一个翻看的时候发现引号用错了,好像因为是复制来的,万恶的字符编码格式。这个问题应该可以在apache的log文件中发现,log目录下的error.log
sys.path.append('E:\root\website\MsgPressTest\MsgPressTest')
sys.path.append('E:\root\website\MsgPressTest\MsgPressTest\MsgPressTest')   

为了以后方便配置,把wsgi.py和setting.wsgi贴出来备份
wsgi.py

import os
# root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
# sys.path.insert(0, os.path.abspath(os.path.join(root_path, 'firstdj')))
# sys.path.insert(0, root_path)

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__), "../")))
sys.path.append('E:\root\website\MsgPressTest\MsgPressTest')
sys.path.append('E:\root\website\MsgPressTest\MsgPressTest\MsgPressTest')
os.environ["DJANGO_SETTINGS_MODULE"] = "MsgPressTest.settings" #your settings module
application = WSGIHandler()

setting.wsgi

import os
import sys
import django.core.handlers.wsgi
 
sys.path.append(r'E:/root/website/MsgPressTest')
os.environ['DJANGO_SETTINGS_MODULE'] = 'MsgPressTest.settings'
application = django.core.handlers.wsgi.WSGIHandler()

同时需要注意上面两个文件所在目录


0 0
原创粉丝点击