大家覺得有用就收藏一下/頂一下/評論一下唄,一直都是自己在有道上面打雲筆記,最近想刷刷CSDN的分了
要了我的親命了,配了兩三次apache上的django項目了,還是有一些意外的bug,揀出來幾個還記得的bug備案,方便下次查詢。
各種查資料,網絡上的文章大多對 VirtualHost 沒什麼說明,導致配置到這個地方總會因爲一些理解上的偏差出問題。
按照網絡上的情景部署django項目到apache上,因爲有多個項目並存在這臺服務器上,所以需要使用 VirtualHost 對不同的項目進行劃分,這個地方貌似也可以在一個host下劃分,具體沒有深入研究,之後再關注,先總結分 VirtualHost 下部署項目。
下載
mysql-python :點擊打開鏈接
python由於我下的版本有點多,結果造成混淆了,裝亂了,導致配置時候有些意外,比如兩個程序運行在不同的版本python上,有的python沒安裝django,造成問題,還不宜發現,django默認安裝在最新的python上面,請注意
django就下載gz那個包就好,然後python install.py install安裝
1、遇到的一個很重要的問題 import django.core.handlers.wsgi 這個東西找不到
場景:這個問題是apache的log中顯示的,如果restart方式重啓,不會報這個問題,先stop,再start就會報出來
由於版本比較多,結果沒注意運行在了一個沒安裝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()
同時需要注意上面兩個文件所在目錄