windows下apache部署django項目個人總結(備查)

大家覺得有用就收藏一下/頂一下/評論一下唄,一直都是自己在有道上面打雲筆記,最近想刷刷CSDN的分了大哭

 

        要了我的親命了,配了兩三次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()

同時需要注意上面兩個文件所在目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章