W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
如果你使用 Apache web 服務(wù)器,請考慮使用 mod_wsgi 。
注意:
請確保在任何 ?app.run()
?調(diào)用之前,你應(yīng)該把應(yīng)用文件放在一個? if
__name__ == `__main__`:
? 塊中或移動到獨立的文件。只確保它沒被調(diào)用是
因為這總是會啟動一個本地的 WSGI 服務(wù)器,而當(dāng)我們使用? mod_wsgi
?部署應(yīng)用
時并不想讓它出現(xiàn)。
如果你還沒有安裝過 ?mod_wsgi
?,你需要使用包管理器來安裝或手動編譯它。
mod_wsgi 的 安裝指引 涵蓋了 UNIX 系統(tǒng)中的源碼安裝。
如果你使用 ?Ubuntu/Debian
? 你可以按照下面的命令使用 ?apt-get
?獲取并激活它:
# apt-get install libapache2-mod-wsgi
在 FreeBSD 上,通過編譯 www/mode_wsgi port 或使用 pkg_add 來安裝:
# pkg_add -r mod_wsgi
如果你在使用 pkgsrc 你可以編譯 www/ap2-wsgi 包來安裝 mod_wsgi 。
如果你在 apache 第一次重加載后遇到子進程段錯誤,你可以安全地忽略它們。 只需要重啟服務(wù)器。
你需要一個 yourapplication.wsgi 文件來運行你的應(yīng)用。這個文件包含 mod_wsgi 啟動時執(zhí)行的獲取應(yīng)用對象的代碼。這個對象在該文件中名為 application ,并在 之后作為應(yīng)用。
對于大多數(shù)應(yīng)用,下面度文件就可以勝任:
from yourapplication import app as application
如果你沒有一個用于創(chuàng)建應(yīng)用的工廠函數(shù)而是單例的應(yīng)用,你可以直接導(dǎo)入它為 application 。
把這個文件放在你可以找到的地方(比如 /var/www/yourapplication )并確保 yourapplication 和所有使用的庫在 python 載入的路徑。如果你不想在系統(tǒng)全局 安裝它,請考慮使用 virtual python 實例。記住你也會需要在 virtualenv 中安裝應(yīng)用??蛇x地,你可以在 .wsgi 文件中在導(dǎo)入前修補路徑:
import sys
sys.path.insert(0, '/path/to/the/application')
你需要做的最后一件事情就是為你的應(yīng)用創(chuàng)建一個 Apache 配置文件。在本例中,考慮 安全因素,我們讓 mod_wsgi 來在不同度用戶下執(zhí)行應(yīng)用:
<VirtualHost *>
ServerName example.com
WSGIDaemonProcess yourapplication user=user1 group=group1 threads=5
WSGIScriptAlias / /var/www/yourapplication/yourapplication.wsgi
<Directory /var/www/yourapplication>
WSGIProcessGroup yourapplication
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
更多信息請翻閱 mod_wsgi wiki 。
如果你的應(yīng)用不能運行,按照下面的指導(dǎo)來排除故障:
記住 mod_wsgi 禁止對 sys.stdout 和 sys.stderr 做操作。 你可以通過設(shè)定配置中的 WSGIRestrictStdout 為 off 來禁用這個保護。
WSGIRestrictStdout Off
或者,你可以在 .wsgi 文件中用不同的流來替換標(biāo)準(zhǔn)輸出:
import sys
sys.stdout = sys.stderr
你的應(yīng)用可能是一個你符號鏈接到 site-packages 文件夾的單個 .py 文件。 請注意這不會正常工作,除非把這個文件放進 pythonpath 包含的文件夾中, 或是把應(yīng)用轉(zhuǎn)換成一個包。
這個問題同樣適用于非安裝的包,模塊文件名用于定位資源,而符號鏈接會獲取 錯誤的文件名。
你可以激活自動重載入支持來協(xié)助部署工具。無論何時,當(dāng) .wsgi 文件, mod_wsgi 會為我們自動重新加載所有的守護進程。
為此,只需要直接在你的 Directory 節(jié)中添加如下內(nèi)容:
WSGIScriptReloading On
虛擬環(huán)境的優(yōu)勢是它們永遠(yuǎn)不在系統(tǒng)全局安裝所需的依賴關(guān)系,這樣你可以更好 地控制使用什么。如果你想要同 mod_wsgi 使用虛擬環(huán)境,你需要稍微修改一下 .wsgi 文件。
把下面的幾行添加到你 .wsgi 文件的頂部:
activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
這根據(jù)虛擬環(huán)境的設(shè)置設(shè)定了加載路徑。記住這個路徑一經(jīng)是絕對的。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: