mac安裝apache的mod_wsgi模組錯誤總結以及hello world測試
mac系統版本為OS X EI Capitan 10.11.4
(其實系統已經安裝好了管理員許可權的apache,在/etc/apache2下,但是我們還是要安裝使用者許可權的apache,方便更改檔案不需要許可權)
預設已經在mac上面安裝好了使用者許可權的apache。(如果沒有安裝好的話,傳送門:Apache Installing
apache安裝的一些小問題
我簡單說說在安裝apache過程中遇到的問題:
- 如果遇到OSError或者寫入錯誤的話,一般是沒有root目錄下的寫入許可權,使用sudo命令獲得許可權就好。
- 通常在安裝的過程中會遇到各種各樣的工具缺失,比如apr,pcre等,去官網下載原始碼下來解壓,然後執行configure檔案後編譯就好了。命令如下:
./configure --prefix=安裝地址
make
make install
#如果想清除之前的.o檔案可以使用make distclean
安裝好apache之後命令列進入bin目錄下執行./apachectl start啟動apache服務。
- 啟動過程中最常見的就是80埠被佔用,體現為套接字無法繫結地址,為了省事,我直接將apache中conf目錄下的httpd.conf檔案中監聽的埠改成了8000。
Listen 127.0.0.1:8000
開啟瀏覽器輸入localhost後返回it works之後apache則安裝成功。
apache安裝擴充套件模組mod_wsgi
安裝方法傳送門:mod_wsgi installation
第一種方法是傳統的apache安裝擴充套件模組的方法,先下載mod_wsgi原始碼,configure然後再編譯安裝,然而因為在make intall的時候出現了root許可權問題(用sudo也無法解決,詳細的情況討論請參見這裡),所以我選擇了用第二種方法安裝mod_wsgi模組。
第二種方法就是直接用pip安裝mod_wsgi,安裝好之後將mod_wsgi-py27.so的路徑配置在httpd.conf檔案中。命令如下:
[sudo] pip install mod_wsgi
mod_wsgi-express module -location
#將輸出的路徑複製到httpd.conf中,假設輸出的路徑為/user/local/mod_wsgi-py27.so
#在http.conf中寫入以下命令:
LoadModule wsgi_module /user/local/mod_wsgi-py27.so
重新啟動apache伺服器,mod_wsgi模組就應該安裝好了。
hello world example 與 mod_wsgi模組互動
接下來可以試一下用一個簡單的hello world application來測試一下mod_wsgi模組的正常工作。
定義一個符合WSGI標準的application並儲存該檔案為hello.wsgi。(如果不太清楚WSGI標準的可以參看我的一篇部落格: WSGI初探及wsgiref簡單實現)
#hello.wsgi
def application(environ, start_response):
status = "200 OK"
response_headers = [('Content-type', 'text/plain')]
output = "hello world!"
start_response(status, response_headers)
return [output]
我嘗試用了兩種方法來配置apache使其呼叫hello.wsgi返回hello world。
- 第一種方法就是直接將hello.wsgi放在apache的根目錄下訪問,比較簡單。
- 第二種方法就是在apache上配置一個虛擬主機,通過自己設定的域名來訪問hello.wsgi。
我們先來看第一種方法:
- 首先開啟conf目錄下的httpd.conf檔案(就是apache的主伺服器的配置檔案),找到DocumentRoot變數,它的值就是apache伺服器的根目錄,把你的hello.wsgi檔案拖到該目錄下。(注意,在mac下應該已經確認在Finder中開啟所有的檔案字尾名,hello.wsgi的字尾名為.wsgi,當然,不一定要使用字尾名.wsgi,也可以使用.py字尾)
- 然後在DocumentRoot變數(假設為/Users/Apache/WWW)下設定WSGI指令碼的別名:
WSGIScriptAlias /hello.wsgi /Users/Apache/WWW/hello.wsgi
在開啟apache服務後,我們在瀏覽器中輸入localhost :8000/hello.wsgi (監聽的埠為8000),即可看到“hello world!”。
值得注意的是,如果WSGIScriptAlias設定成了:
WSGIScriptAlias / /Users/Apache/WWW/hello.wsgi
那麼在WWW目錄下的所有靜態檔案都會被遮蔽,對localhost:8000/*(*表示任意字元)的任意訪問都會轉換成對hello.wsgi的訪問。如果我們還想要訪問在WWW目錄下的靜態檔案,則需要用到Alias指令。
第二種方法:
1.首先 在http.conf檔案中設定可以引入包含虛擬主機的檔案:
# Virtual hosts
# Include conf/extra/httpd-vhosts.conf
將上面的#去掉就可以引入虛擬主機的配置檔案了
2.在extra目錄下找到http-ghosts.conf配置virtual host,基本跟配置主伺服器一樣:
(假設虛擬主機的根目錄為/Users/Apache/VirtualHost,監聽的埠為8001)
<VirtualHost *:8001>
DocumentRoot "/Users/Apache/VirtualHost"
ServerName www.virtualhost.com
ServerAlias virtualhost.com
WSGIScriptAlias /hello.wsgi /Users/Apache/VirtualHost/hello.wsgi
DirectoryIndex index.html
<Directory "/Users/Apache/VirtualHost">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
3.在設定完虛擬主機的配置檔案之後,我們還不能在瀏覽器中立即測試我們的新域名,我們還要將新域名和127.0.0.1繫結起來。因此開啟/etc/hosts檔案,繫結域名和地址(修改檔案需要許可權):
127.0.0.1 virtualhost.com
那麼/etc/hosts為什麼要這樣設定呢?
一般來說,當瀏覽器得到域名的時候,瀏覽器首先通過/etc/hosts檔案查詢它的ip地址,得不到ip的時候再向DNS伺服器查詢。因此,如果我們在mac上設定了shadowsocks的全域性代理,所有的請求直接走代理,那麼我們就獲取不到這個我們自己創立的域名的ip地址了。(所以記得關閉你的翻牆工具)
此時,我們開啟瀏覽器就可以輸入virtualhost.com:8000/hello.wsgi就能看到“hello world!”了。
關於mod_wsgi模組的embedded mode(嵌入模式)與Daemon Process(守護程序)
mod_wsgi模組在載入WSGI應用程式的時候有兩種不同的模式,預設使用的是嵌入模式,而另一種模式是守護程序,等會我們會講述如何開啟守護程序。
這兩種模式有什麼不同呢?嵌入模式將會直接在apache的子程序中載入WSGI Application,而守護程序則會在與apache程序的不同程序中載入,需要進行程序間的通訊機制。因此,如果對WSGI Application的程式碼進行了修改,那麼在嵌入模式下需要重啟apache伺服器,而在守護程序下則不需要重啟伺服器(這對於如果沒有重啟伺服器的許可權卻又需要修改應用程式的情況下是很有用的)。
以及,如果多個django的專案佈置在同一臺apache伺服器上,也是推薦用守護程序,否則程序中的django_settings_module會相互錯亂,具體參考這裡:How to use Django with Apache and mod_wsgi。
接下來是Daemon process的virtual host配置程式碼(在第二種方法的程式碼基礎上加上以下程式碼):
#在VirtualHost標籤內加上以下程式碼
WSGIDaemonProcess virtualhost.com processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup virtualhost.com
#在VirtualHost標籤以外加上以下程式碼
WSGISocketPrefix /Users/Apache/run/wsgi
關於前兩行程式碼的詳細作用請參考官方文件。
重點說一下最後一行的作用,首先假設我們沒有在VirtualHost標籤以外加上WSGISocketPrefix,或者,WSGISocketPrefix指定的目錄沒有讀寫許可權,我們訪問hello.wsgi都會返回:
503 Service Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
為什麼會這樣呢?首先我們知道Daemon模式下是不同程序間的通訊,而其中使用了本地的socket,因此,伺服器端需要對一個檔案目錄擁有寫的許可權來儲存socket檔案,客戶端需要知道這養的一個檔案目錄並且具有讀的許可權來獲取socket檔案。所以,WSGISocketPrefix變數值只要設定一個具有讀寫許可權的任意目錄就可以了。
mod_wsgi模組部署django應用
官方文件說的非常清楚,別忘了WSGIPythonPath變數即可(嵌入模式與守護程序配置不一樣)。
官方文件傳送門
相關推薦
mac安裝apache的mod_wsgi模組錯誤總結以及hello world測試
mac系統版本為OS X EI Capitan 10.11.4 (其實系統已經安裝好了管理員許可權的apache,在/etc/apache2下,但是我們還是要安裝使用者許可權的apache,方便更改檔案不需要許可權) 預設已經在mac上面安裝好了使用者許可權
FPGA QuartusII 13.0.1+ModelSim SE 10.1a聯合模擬以及Hello World測試程式
一、實驗環境(藍色粗體字為特別注意內容) 1,環境:Windows 7 Ultimate 32 bit、QuartusII 13.0.1 win32、ModelSim SE 10.1a win32 2,參考文獻: ①http://bbs.eeworld.com.cn/thread-530
Ruby 開發環境安裝linux、mac,遇到的錯誤總結(使後人避免入坑)
一、linux安裝ruby時遇到的錯誤 首先講一下為什麼不寫Windows的,個人建議,最好不要用Windows環境,問題很多,需要安裝的東西更多,而且未知的錯誤多,網上不一定查的到,我也安裝過Windows的,也成功過,但是,有時執行會報錯,後來放棄了,安了個Linux的,再後來用了mac系統,
windows 安裝Scrapy常見錯誤總結
window scrapy 寫這篇文章,不僅是為了匯總安裝Scrapy的常見安裝問題,還自己獨立解決問題的能力。從一開始報VS C++版本的錯誤,到後來在CentOS運行pip install lxml很慢(CentOS 7 是一臺虛擬機)。這是一種常見的安裝lxml的異常情況:電腦環境:win10 64位
Mac安裝vue產生錯誤
rec mod module key style check web apple mis p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color
hive2.*安裝部署常見錯誤總結(連載)
異常一、java.lang.RuntimeException Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate o
python mac安裝MySQLdb 模組 遇到的坑
1.首先需要在mac安裝好mysql 2.遇到錯誤 error: command 'cc' failed with exit status 1 _mysql.c:44:10: fatal error: 'my_config.h' file not found 解
卜若的程式碼筆記-python系列-遊戲篇-第一章:Kivy安裝以及hello world
1.安裝kivy 進入到你的python等根目錄 shift+滑鼠右鍵,喚出power shell 更新或安裝你的pip,如果已經更新完成或者安裝的請忽略 ./python -m pip install --upgrade pip 2.安裝依賴 ./pytho
安裝linux遇到問題總結以及解決方式
最近開始研究linux,之前也用過,不過是用公司買的雲伺服器,現在開始自己在本機通過虛擬機器的方式安裝linux,就當做是學習吧。在進行的過程中遇到了一些問題,總結了下,也在網上看了其他人的一些想法,現在分享給大家。 版本為:Ubuntu 16.40LTS 官網可以下載
安裝 tensorpack的錯誤總結
今年第一篇,遇到些小bug。 然後https://pypi.org/project/msgpack-numpy/ 一用命令列安裝 巧了怎麼都是安裝到4.3 所以哈..... 好憂傷,正準備下載包自己想離線安裝 時 無意搜了下
Arduino學習(一):入門篇:軟硬體安裝 以及 hello,world編譯執行
Arduino是一款微控制器開發板,是個很好上手的入門級開發板,適合於用於開發電子產品原型,開發語言採用C,其特點是簡單、方便、軟體庫多、模組配件多。 一、微控制器, MCU 微控制單元(Microcontroller Unit, 即MCU) ,又稱單片微型計算機(S
VS2015下安裝VTK7.0錯誤總結
初次接觸VTK,把遇到的錯誤總結在此,希望對後來人有所幫助。 1、Cmake編譯的時候提示如下錯誤: CMake Error at CMakeLists.txt:4 (find_package): Could not find a package conf
mac下創建安卓應用 hello-world
article 安卓 https pro 打開 www 目錄 .com tails 教程 https://www.jianshu.com/p/bf77cb5ce70b 需要註意的地方 jdk目錄查找 jdk目錄拷貝到tool目錄下面(jdk可以拷貝,沒有其他牽扯) http
django 的基礎配置以及hello world例項
1:pip install django(我一般使用的是virtualenvwrapper建立虛擬環境,這樣有利於環境的隔離)具體看我得另外一篇部落格: 2:需要切換到你需要存放專案的目錄下:使用命令如下 django-admin startproject project_name 3:
flask 基礎環境的配置以及hello world例項
1:pip install flask 一個簡單flask應用的建立: 首先需要匯入flask包: from flask import Flask # 例項化flask例項 app = Flask(__name__) # 定義檢視函式注意flask的檢視函式
go 語言開發環境搭建以及Hello World
環境搭建 安裝包下載https://golang.org/dl/,如下圖,選擇你想要的版本。 預設目錄為 C:\Go,配置環境變數 path,新增 C:\Go\bin。 命令列輸入go versio
IEDA配置scala的執行以及hello world小例項
IDEA下載:https://www.jetbrains.com/idea/download/#section=windows 下載安裝完IDEA之後,進行配置Scala 1:首先下載scala pulgins :https://plugins.jetbrains.
【JAVA】Eclipse安裝+第一個入門案例"Hello World"
1.Eclipse的下載與安裝 Eclipse下載官網: https://www.eclipse.org/downloads/ 下載完成後雙擊,選擇第二個 建立一個eclipse的安裝檔案,點選安裝 接受協議,等待安裝 安裝完成,點選開始 可以先建立一個資料夾,這是以後ecl
jfinal的環境配置以及hello world
就是這幾個方法,那麼這個類是幹嘛的呢,是對整個專案進行配置的,看名字也可以看出來config,configuration是吧。第一個方法configConstant是對整個專案的基本資訊進行配置的,一般加入下列幾個,public void configConstant(Constants me) { //
qt簡單的hello world測試程式終端無輸出問題
參考:http://stackoverflow.com/questions/3255035/qt-creator-run-in-terminal Under Tools-Options-Environment-General, change the terminal val