使用FastCGI部署Python的Django應(yīng)用的教程
作為一個(gè)mod_python模塊的替代,你可以考慮使用mod_wsgi模塊,此模塊開(kāi)發(fā)的時(shí)間比mod_python的開(kāi)發(fā)時(shí)間離現(xiàn)在更近一些,在Django社區(qū)已有一些使用。 一個(gè)完整的概述超出了本書的范圍,你可以從官方的Django文檔查看到更多的信息。
使用FastCGI部署Django應(yīng)用
盡管將使用Apache和mod_python搭建Django環(huán)境是最具魯棒性的,但在很多虛擬主機(jī)平臺(tái)上,往往只能使用FastCGI
此外,在很多情況下,F(xiàn)astCGI能夠提供比mod_python更為優(yōu)越的安全性和效能。 針對(duì)小型站點(diǎn),相對(duì)于Apache來(lái)說(shuō)FastCGI更為輕量級(jí)。
FastCGI 簡(jiǎn)介
如何能夠由一個(gè)外部的應(yīng)用程序很有效解釋W(xué)EB 服務(wù)器上的動(dòng)態(tài)頁(yè)面請(qǐng)求呢? 答案就是使用FastCGI! 它的工作步驟簡(jiǎn)單的描述起來(lái)是這樣的:
和mod_python一樣,F(xiàn)astCGI也是駐留在內(nèi)存里為客戶請(qǐng)求返回動(dòng)態(tài)信息,而且也免掉了像傳統(tǒng)的CGI一樣啟動(dòng)進(jìn)程時(shí)候的時(shí)間花銷。 但于mod_python不同之處是它并不是作為模塊運(yùn)行在web服務(wù)器同一進(jìn)程內(nèi)的,而是有自己的獨(dú)立進(jìn)程。
為什么要在一個(gè)獨(dú)立的進(jìn)程中運(yùn)行代碼?
在以傳統(tǒng)的方式的幾種以mod_*方式嵌入到Apache的腳本語(yǔ)言中(常見(jiàn)的例如: PHP,Python/mod_python和Perl/mod_perl),他們都是以apache擴(kuò)展模塊的方式將自身嵌入到Apache進(jìn)程中的。
每一個(gè)Apache進(jìn)程都是一個(gè)Apache引擎的副本,它完全包括了所有Apache所具有的一切功能特性(哪怕是對(duì)Django毫無(wú)好處的東西也一并加載進(jìn)來(lái))。 而FastCGI就不一樣了,它僅僅把Python和Django等必備的東東弄到內(nèi)存中。
依據(jù)FastCGI自身的特點(diǎn)可以看到,F(xiàn)astCGI進(jìn)程可以與Web服務(wù)器的進(jìn)程分別運(yùn)行在不同的用戶權(quán)限下。 對(duì)于一個(gè)多人共用的系統(tǒng)來(lái)說(shuō),這個(gè)特性對(duì)于安全性是非常有好處的,因?yàn)槟憧梢园踩挠趧e人分享和重用代碼了。
如果你希望你的Django以FastCGI的方式運(yùn)行,那么你還必須安裝 flup 這個(gè)Python庫(kù),這個(gè)庫(kù)就是用于處理FastCGI的。 很多用戶都抱怨 flup 的發(fā)布版太久了,老是不更新。 其實(shí)不是的,他們一直在努力的工作著,這是沒(méi)有放出來(lái)而已。
運(yùn)行你的 FastCGI 服務(wù)器
FastCGI是以客戶機(jī)/服務(wù)器方式運(yùn)行的,并且在很多情況下,你得自己去啟動(dòng)FastCGI的服務(wù)進(jìn)程。 Web服務(wù)器(例如Apache,lighttpd等等)僅僅在有動(dòng)態(tài)頁(yè)面訪問(wèn)請(qǐng)求的時(shí)候才會(huì)去與你的Django-FastCGI進(jìn)程交互。 因?yàn)镕ast-CGI已經(jīng)一直駐留在內(nèi)存里面了的,所以它響應(yīng)起來(lái)也是很快的。
記錄
在虛擬主機(jī)上使用的話,你可能會(huì)被強(qiáng)制的使用Web server-managed FastCGI進(jìn)程。 在這樣的情況下,請(qǐng)參閱下面的“在Apache共享主機(jī)里運(yùn)行Django”這一小節(jié)。
web服務(wù)器有兩種方式于FastCGI進(jìn)程交互: 使用Unix domain socket(在win32里面是 命名管道 )或者使用TCP socket.具體使用哪一個(gè),那就根據(jù)你的偏好而定了,但是TCP socket弄不好的話往往會(huì)發(fā)生一些權(quán)限上的問(wèn)題。 What you choose is a manner of preference; a TCP socket is usually easier due to permissions issues.
開(kāi)始你的服務(wù)器項(xiàng)目,首先進(jìn)入你的項(xiàng)目目錄下(你的 manage.py 文件所在之處),然后使用 manage.py runfcgi 命令:
./manage.py runfcgi [options]
想了解如何使用 runfcgi ,輸入 manage.py runfcgi help 命令。
你可以指定 socket 或者同時(shí)指定 host 和 port 。當(dāng)你要?jiǎng)?chuàng)建Web服務(wù)器時(shí),你只需要將服務(wù)器指向當(dāng)你在啟動(dòng)FastCGI服務(wù)器時(shí)確定的socket或者h(yuǎn)ost/port。
范例:
在TCP端口上運(yùn)行一個(gè)線程服務(wù)器:
./manage.py runfcgi method=threaded host=127.0.0.1 port=3033
在Unix socket上運(yùn)行prefork服務(wù)器:
./manage.py runfcgi method=prefork socket=/home/user/mysite.sock pidfile=django.pid
啟動(dòng),但不作為后臺(tái)進(jìn)程(在調(diào)試時(shí)比較方便):
./manage.py runfcgi daemonize=false socket=/tmp/mysite.sock
停止FastCGI的行程
如果你的FastCGI是在前臺(tái)運(yùn)行的,那么只需按Ctrl+C就可以很方便的停止這個(gè)進(jìn)程了。 但如果是在后臺(tái)運(yùn)行的話,你就要使用Unix的 kill 命令來(lái)殺掉它。 然而,當(dāng)你正在處理后臺(tái)進(jìn)程時(shí),你會(huì)需要將其付諸于Unix kill的命令
如果你在 manage.py runfcgi 中指定了 pidfile 這個(gè)選項(xiàng),那么你可以這樣來(lái)殺死這個(gè)FastCGI后臺(tái)進(jìn)程:
kill `cat $PIDFILE`
$PIDFILE 就是你在 pidfile 指定的那個(gè)。
你可以使用下面這個(gè)腳本方便地重啟Unix里的FastCGI守護(hù)進(jìn)程:
#!/bin/bash # Replace these three settings. PROJDIR="/home/user/myproject" PIDFILE="$PROJDIR/mysite.pid" SOCKET="$PROJDIR/mysite.sock" cd $PROJDIR if [ -f $PIDFILE ]; then kill `cat -- $PIDFILE` rm -f -- $PIDFILE fi
exec /usr/bin/env - PYTHONPATH="../python:.." ./manage.py runfcgi socket=$SOCKET pidfile=$PIDFIL
- python創(chuàng)建ArcGIS shape文件的實(shí)現(xiàn)
- 利用arcgis的python讀取要素的X,Y方法
- Python的CGIHTTPServer交互實(shí)現(xiàn)詳解
- 基于Python_腳本CGI、特點(diǎn)、應(yīng)用、開(kāi)發(fā)環(huán)境(詳解)
- 在arcgis使用python腳本進(jìn)行字段計(jì)算時(shí)是如何解決中文問(wèn)題的
- 在IIS服務(wù)器上以CGI方式運(yùn)行Python腳本的教程
- Windows 配置Apache以便在瀏覽器中運(yùn)行Python script的CGI模式
- 使用python實(shí)現(xiàn)CGI環(huán)境搭建過(guò)程解析
相關(guān)文章
python區(qū)塊及區(qū)塊鏈的開(kāi)發(fā)詳解
這篇文章主要介紹了python區(qū)塊及區(qū)塊鏈的開(kāi)發(fā)詳解的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07Python?使用pip在windows命令行中安裝HDF?reader包的操作方法
HDF reader包是一個(gè)常用來(lái)將.mat類型數(shù)據(jù)導(dǎo)入到python在這里插入代碼片中使用的包,非常好用,今天介紹一下,如何在命令行中安裝這個(gè)包,需要的朋友可以參考下2022-12-12詳解Django解決ajax跨域訪問(wèn)問(wèn)題
這篇文章主要介紹了詳解Django解決ajax跨域訪問(wèn)問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08Python Opencv實(shí)現(xiàn)單目標(biāo)檢測(cè)的示例代碼
這篇文章主要介紹了Python Opencv實(shí)現(xiàn)單目標(biāo)檢測(cè)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09python 劃分?jǐn)?shù)據(jù)集為訓(xùn)練集和測(cè)試集的方法
今天小編就為大家分享一篇python 劃分?jǐn)?shù)據(jù)集為訓(xùn)練集和測(cè)試集的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12python根據(jù)unicode判斷語(yǔ)言類型實(shí)例代碼
這篇文章主要介紹了python根據(jù)unicode判斷語(yǔ)言類型實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01對(duì)python遍歷文件夾中的所有jpg文件的實(shí)例詳解
今天小編就為大家分享一篇對(duì)python遍歷文件夾中的所有jpg文件的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Python利用filestools模塊實(shí)現(xiàn)水印添加
最近發(fā)現(xiàn)的這款filestools非標(biāo)準(zhǔn)庫(kù)其實(shí)真正實(shí)現(xiàn)添加水印的只要一個(gè)函數(shù)的調(diào)用,一行代碼即可完成水印的添加,感興趣的快跟隨小編一起學(xué)起來(lái)吧2022-09-09使用Python docx修改word關(guān)鍵詞顏色的操作
這篇文章主要介紹了使用Python docx修改word關(guān)鍵詞顏色的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03