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