pythonflup
基於python的web開發,這里我們使用linux為開發環境,搭建基於nginx + web.py + fastcgi
有些基本基本概念解釋下,哈哈,因為我不懂
1.wsgi為Web伺服器網關介面(Python Web Server Gateway Interface,縮寫為WSGI)是是為Python語言定義的Web伺服器和Web應用程序或框架之間的一種簡單而通用的介面。自從WSGI被開發出來以後,許多其它語言中也出現了類似介面
2.uwsgi,另一種python定義的web伺服器和web應用的介面
3.REST服務,REST(Representational State Transfer表述性狀態轉移)是一種針對網路應用的設計和開發方式,可以降低開發的復雜性,提高系統的可伸縮性。
4.CRUD是指在做計算處理時的增加(Create)、查詢(Retrieve)(重新得到數據)、更新(Update)和刪除(Delete)幾個單詞的首字母簡寫。主要被用在描述軟體系統中資料庫或者持久層的基本操作功能
以下內容主要來自
http://webpy.org/cookbook/fastcgi-nginx
需要的軟體
nginx 0.7以上版本,我使用的是nginx 0.9.2
webpy我使用的web.py-0.37
spawn-fcgi 1.6.3
flup 1.0
nginx的配置請參看官方文檔
spawn-fcgi是lighttpd的一個子項目用於多進程管理
webpy和flup安裝方式為解壓後運行python setup.py install
安裝編寫index.py
點擊(此處)折疊或打開
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import web
urls = ("/.*", "hello")
app = web.application(urls, globals())
class hello:
def GET(self):
return 'Hello, world!'
if __name__ == "__main__":
web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
app.run()
注意index.py需要使用命令chmod +x index.py加入可執行許可權
將index.py放入/data/www(我所使用的目錄你可以修改)
修改nginx.conf配置
index要加入index.py
Nginx的配置加入
點擊(此處)折疊或打開
location / {
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass 127.0.0.1:9002;
}
使用Spawn-fcgi
spawn-fcgi -d /data/www -f /data/www/index.py -a 127.0.0.1 -p 9002
如果報錯為126,說明index.py沒有可執行許可權
netstat -lnp | grep 9002參考是否啟動成功
我運行的實際為
spawn-fcgi -d /data/www -f /data/www/index.py -a 127.0.0.1 -p 9002 -F 2
啟動2個進程
啟動nginx
瀏覽器輸入地址
成功結束
② 如何部署python web程序
Python Web 程序的部署方案
綜合而言, 高性能的Python web站點部署方式首推 nginx + uwsgi
apache + mod_wsgi 是簡單穩定但性能一般的方式
API伺服器 可以直接使用tornado或者gevent
mod_python
非常原始的cgi模式部署python已經沒有什麼好介紹了。對於不太追求性能的管理系統和網站來說,使用 Apache 部署是一個不錯的選擇。較早的時候,使用 mode_python 部署python的web應用十分流行,在Django 0.96 的時候官方文檔甚至推薦這種方式。
它將Python解釋器嵌入到Apache server,以提供一個訪問Apache server內部的介面。mod_python 在現在看來性能是不佳的,每一個http請求 mod_python 都會由一個進程初始化python解釋器、載入代碼、執行、然後銷毀進程。
mod_wsgi
如果非要用Apache來部署python應用,mod_wsgi是一個更好的選擇。WSGI 全稱是 Web Server Gateway Interface ,由 PEP-333 定義。 基本上所有的python web框架都實現了wsgi介面,用mod_wsgi 能部署任何實現了wsgi的框架。實際上,不需要任何框架也可以用mod_wsgi 部署python程序。使用mod_wsgi的daemon模式,python程序會常駐內存,不會有很大的初始化和銷毀進程方面的開銷,所以性能是好於mod_python的。綜合來說,使用Apache部署python web程序,推薦使用mod_wsgi的daemon模式。
Fastcgi
先說觀點:不建議用fastcgi的方式部署Python web。
前幾年由於lighttpd風頭正勁和豆瓣的成功案例,fastcgi是一種很流行的部署方式。fastcgi與具體語言無關,也與web伺服器無關。是一種通用的部署方式。fastcgi是對於cgi的增強,CGI程序運行在獨立的進程中,並對每個Web請求建立一個進程。面對大量請求,進程的大量建立和消亡使操作系統性能大大下降。
與為每個請求創建一個新的進程不同,FastCGI使用持續的進程來處理一連串的請求。這些進程由FastCGI伺服器管理,而不是web伺服器。 當進來一個請求時,web伺服器把環境變數和這個頁面請求通過一個socket比如FastCGI進程與web伺服器都位於本地)或者一個TCP connection(FastCGI進程在遠端的server farm)傳遞給FastCGI進程。
主流的web伺服器,Apache,lighttpd,nginx 都支持fastcgi,在幾年前,lighttpd的mod_fcgi模塊性能強勁,lighttpd+fastcgi十分流行。無論是python,ruby還是php,都有大量的站點使用這種方式部署。由於nginx的崛起,現在很少有人使用lighttpd了。
fastcgi 並不是專門為python設計,並不是所有的python框架天然的支持fastcgi,通常需要flup這樣的容器來配適。flup由python編寫,和專門的c實現的wsgi容器比起來性能顯得相當不堪。fastcgi的穩定性對於新興的wsgi容器來說也有差距。無論從哪個方面來看,部署python web程序,fastcgi 都已經是過去式。
uwsgi
前幾年nginx還未內置uwsgi模塊的時候,部署uwsgi還是一件挺麻煩的事情。隨著能夠在nginx中直接使用uwsgi模塊,uwsgi已經是最可靠,最方便的高性能python web程序的部署方式了。
在1U的四核XEON伺服器上,一個簡單的wsgi handler甚至能用AB壓到8000以上的qps,這已經是完爆tornado,接近gevent的性能了。 同時,uwsgi的穩定性極好。之前我們有個每天500w-1000w動態請求的站點使用uwsgi部署非常穩定,在一個渣HP 1U 伺服器上,基本不用管它。
上面提到的部署方式都是相對於web網站的方式,在移動互聯網的時代,我們需要的是高性能的API服務,上面這些都是過時的東西。
tornado
tornado 號稱高性能,如果拿他寫網站,其實一般般,只不過跟uwsgi加一些簡單框架差不多而已。它真正的作用,是用來寫API伺服器和長連接的伺服器。
由於tornado能夠直接處理http請求,很多人直接拿他來裸奔直接提供服務。這種方式是不可取的,單線程的tornado只能利用cpu的一個核心,並且一旦阻塞直接就廢了。通常情況下,由supervisor啟動多個tornado進程,通過nginx進行反向代理負載均衡。nginx 1.14 以後的版本反向代理支持長連接,配合tornado的comet效果很好。
tornado還有一些比較奇葩的用法,比如用來做wsgi容器之類的。
gevent
gevent是一個神器,能做的事情很多。在web方面,處理http請求,用起來其實跟tornado差不多,但是要簡陋很多,cookie之類的都沒有。用gevent寫的一些API服務,部署方式還是類似tornado,用supervisor管理多個守護進程,通過nginx做負載均衡。 同樣的它的奇葩用法也和tornado一樣,可以當wsgi容器用。
③ 如何發布python w eb
你可以結合python的flup這個wsgi包來發布你的python web。
找個支持python的伺服器
啟動你的pythonweb程序
綁定域名到你打開的埠
如果解決了您的問題請採納!
如果未解決請繼續追問
④ 如何windows下nginx+django+flup python3
1、安裝python
下載最新的python版本,在本文撰寫時為 python 3.4,
下載地址:https://www.python.org/ftp/python/3.4.0/python-3.4.0.msi,現在完成後點擊運行,完成python安裝(如c:/python34).
配置python路徑支持,右鍵「計算機」=》「屬性」=》「高級系統設置」=》「高級」=》「環境變數」=》「系統變數」=>"Path"=&
gt;"編輯",在後面追加";c:\python34"。這樣,就可以在命令行窗口下直接運行"python.exe"。運行"cmd",打開一個控制
台窗口,運行"python -V",顯示「Python 3.4.0"即表示成功。
2、安裝Django
下載最新版 Django
1.6.2,下載地址: https://www.djangoproject.com/m/releases/1.6/Django-
1.6.2.tar.gz。下載完成後解壓(例如解壓到"D:\Django-1.6.2")。運行"cmd"打開控制台窗口,切換到"d:
\django-1.6.2",運行"setup.py install",安裝完成後啟動python,輸入"import
django;print(django.VERSION)" 顯示「(1, 6, 2, 'final', 0)」即表示成功。
配置django路徑支持,右鍵「計算機」=》「屬性」=》「高級系統設置」=》「高級」=》「環境變數」=》「系統變數」=>"Path"=&
gt;"編輯",在後面追加";C:\Python34\Lib\site-packages\django\bin"。這樣,就可以在命令行窗口下直接
運行django命令。打開控制台窗口,輸入"django-admin.py -h"顯示幫助信息表示成功。
3、下載Flup
注意要支持python3.x系列的 flup3
,下載地址: https://codeload.github.com/chxanders/flup3/zip/master.zip。解壓後如果運
行解壓根目錄下的setup.py會顯示下載setuptools錯誤。所以直接提取子目錄(flup)並拷貝到python第三方軟體目錄下
(C:\Python34\Lib\site-packages)目錄下即可。
啟動python,運行"import flup;print(flup.__path__)",列印"['C:\\Python34\\lib\\site-packages\\flup']"即表示成功。
4、安裝nginx
下載最新的 nginx - 1.5.13
,,下載地址:http://nginx.org/download/nginx-1.5.13.zip。下載後解壓到一個特定目錄(如C:\nginx)即可。
運行nginx,打開瀏覽器,輸入"127.0.0.1",顯示" Welcome to nginx!"即表示成功。
5、新建項目
運行"cmd"打開控制台窗口,輸入"d:"(假設項目目錄為d:\mysite)切換到d盤。輸入"django-admin.py startproject mysite",這樣就建立了一個名為"mysite"的項目.
6、重定向nginx靜態文件到"mysite"
編輯"C:\nginx\conf\nginx.conf"文件,將其中第一個"... root
html;..."更改為「root d:/mysite/html」。運行"c:\nginx\nginx.exe -s
reload"重新載入nginx。打開瀏覽器,輸入「127.0.0.1」,顯示「404」錯誤。這是因為"d:\mysite\html"目錄及文件
不存在。新建"d:\mysite\html"目錄,並在此目錄下新建一個"hello.html"文件。輸
入"<html><body>Hello</body></html>",保存。打開瀏覽器,輸
入"127.0.0.1/hello.html",應該會顯示"hello"信息。
7、運行django fastcgi服務
打開控制台,進入"d:\mysite"目錄,運行"manage.py runfcgi method=threaded host=127.0.0.1 port=8008".啟動FastCGI服務。
8、修改nginx配置文件「nginx.conf",在第一個server(listen 80)組,做一下修改
#1、注釋默認的頁面位置:
#location / {
# root html;
# index index.html index.htm;
#}
#2、添加 定向所有頁面請求到FastCGI
location / {
root d:/mysite;
fastcgi_pass 127.0.0.1:8008;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
}
#3、定向靜態頁面請求到頁面目錄中
location ~* \.(gif|jpg|jpeg|html|js|css|png)$ {
root d:/mysite/html;
index index.html index.htm;
}
運行"nginx -s reload"更新配置。
在目錄(d:\mysite\html)下添加頁面文件"hello.html".在瀏覽器中輸入localhost/hello.html將顯示該靜態頁面內容。
9、在瀏覽器中鍵入"localhost"將顯示django歡迎頁面。
⑤ python3不完全支持python2的縮進策略對嗎
對
python3不完全支持python2的縮進策略是對的
望採納,謝謝
⑥ 如何部署python3 的應用
mod_python,這是apache內置的模塊,很嚴重的依賴於mod_python編譯使用的python版本,和apache配套使用,不推薦
cgi,這個太old,不推薦,而且nginx不支持cgi方式,只能用lighttpd或者apache
fastcgi ,這個是目前流行最廣的做法,通過flup模塊來支持的,在nginx里對應的配置指令是 fastcgi_pass
spawn-fcgi,這個是fastcgi多進程管理程序,lighttpd安裝包附帶的,和
flup效果一樣,區別是flup是
python代碼級引入,spawn-fcgi是外部程序。spawn-fcgi用途很廣,可以支持任意語言開發的代
碼,php,python,perl,只要你代碼實現了fastcgi介面,它都可以幫你管理你的進程
scgi,全名是Simple Common Gateway Interface,也是cgi的替代版本,scgi協議很簡單,我覺得和fastcgi差不多,只是沒有怎麼推廣開來,nginx對應的配置指令是scgi_pass,你想用就用,flup也支持。
http,nginx使用proxy_pass轉發,這個要求後端appplication必須內置一個能處理高並發的http server,在python的web框架當中,只能選擇tornado.
python程序員喜歡發明輪子,tornado除了是一個web framework之外,它還可以單獨提供高性能http
server,所以,如果你採用其他python框架寫代碼,比如說bottle,也一樣可以通過import
tornado 來啟動一個高性能的http
server,同樣的可以採用http協議和nginx一起來部署。擴展開來,python包裡面能處理高並發的http
server還有很多,比如說gevent,也可以被其他框架引用來支持http方式部署。
現實當中,用java來做web程序,通常就用http和nginx配合,應用伺服器選擇tomcat或者jetty
uwsgi,包括4部分組成,
nginx從0.8.4開始內置支持uwsgi協議,uwsgi協議非常簡單,一個4個位元組header+一個body,body可以是很多協議的
包,比如說http,cgi等(通過header裡面欄位標示),我曾經做個一個小規模的性能對比測試,結果表明,uwsgi和fastcgi相比,性能
沒有太明顯的優勢,也可能是數據集較小的原因
uwsgi的特點在於自帶的進程式控制製程序.它是用c語言編寫,使用natvie函數,其實和spawn-fcgi/php-fpm類似。所以uwsgi可以支持多種應用框架,包括(python,lua,ruby,erlang,go)等等
uwsgi協議
web server內置支持協議模塊
application伺服器協議支持模塊
進程式控制製程序
Gunicorn,和uwsgi類似的工具,從rails的部署工具(Unicorn)移植過來的。但是它使用的協議是 WSGI,全稱是Python Web Server Gateway Interface ,這是python2.5時定義的官方標准(PEP 333 ),根紅苗正,而且部署比較簡單,http://gunicorn.org/ 上有詳細教程
mod_wsgi,apache的一個mole,也是支持WSGI協議,https://code.google.com/p/modwsgi/
⑦ 在Windows系統上搭建Nginx+Python+Mysql環境的教程
1 安裝nginx
下載windows上的nginx最新版本,/en/download.html。
解壓後即可。
運行nginx.exe後本地打開localhost,將會看到歡迎頁面,這證明nginx在本地運行良好,如果沒有出現歡迎頁面,請檢查是否有進程佔用了80埠。
2 安裝flup
下載對應版本的flup,這里下載flup3.x版本,適合python3.2,下載地址:https:///chxanders/flup3
解壓(比如解壓到D:flup)
安裝(進入到python的安裝路徑,然後執行下面的命令
1 python setup.py install )
!注意,如果提示缺少setuptools,安裝distribute-0.6.49.tar.gz,安裝方法和flup安裝一樣,下載地址:https:///pypi/distribute/0.6.49
3 安裝Mysql
在這里我使用的是5.1版本。在win系統上雙擊安裝文件,下一步下一步完成。下載地址:/downloads/
4 安裝資料庫驅動
下載用於win上對應py版本的的python-mysql驅動,雙擊安裝即可。下面的下載地址是3.2:
/wangqc/distribute-0.6.49.zip
5 配置伺服器
首先需要修改nginx的配置文件nginx.conf。
找到:
1 2 3 4 location / { root html; index index.html index.htm; } 在裡面加上:
1 2 3 4 5 6 7 8 9 10 11 12 # host and port to fastcgi server fastcgi_pass 127.0.0.1:55880; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param QUERY_STRING $query_string; fastcgi_param SERVER_NAME $server_name; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_pass_header Authorization; fastcgi_intercept_errors off; 然後測試該配置文件是否正確,在cmd中切換到nginx安裝目錄里,輸入
1 nginx.exe -t 即可開始對配置文件測試,如果提示成功,說明配置正確,
這是可以結束掉任務管理器中所有的nginx.exe進程,重新運行ngin.exe重啟nginx服務。
6 運行Server.py
在cmd下切換到項目目錄,輸入命令
1 python Server.py runfcgi method=threaded host=127.0.0.1 port=55880 注意,
這條命令只能用來啟動項目,如果出現錯誤並不會給出提示。下面是正確的情況.
用瀏覽器打開127.0.0.1:8080 測試一下,項目是不是已經跑起來了(第一次運行等待的時間稍長,請耐心等待)。
7 一些注意事項
(1)、首先應該改的地方,這個大家應該都知道:
1 DEBUG = TEMPLATE_DEBUG = False#將debug設置為False (2)、改一下ALLOWED_HOSTS,我死死的就將這個給忘了,我的`配置:
1 2 3 4 if DEBUG:#根據DEBUG來確定 ALLOWED_HOSTS = [""] else: ALLOWED_HOSTS = ["localhost","127.0.0.1"] (3)、重頭戲來了,配置nginx:
這里相關的代碼網上很多,但是幾乎都沒有說明一件事:
配置location ~ ^/static/ 的位置,一定要在location ~ ^/的前面,而且不能單純的使用 location /static/ 或者location /static ,不然,static文件夾中的靜態文件都不能載入!!!
ps:提起這個,慢慢的淚啊,就錯在這里了。
嫌麻煩可以寫成批處理,運行的時候雙擊一下就好了。
⑧ web.py的開發
web.py 內置了web伺服器。可以按照 tutorial 學習如何寫一個Web應用。 寫完後,將你的代碼放到 code.py 並如下面的方法來啟動伺服器:
python code.py
打開你的瀏覽器輸入 http://localhost:8080/ 查看頁面。 若要制定另外的埠,使用 python code.py 1234。 現在所運行 web.py 程序的web伺服器是挺不錯的, 但絕大多數網站還是需要更加專業一些的web伺服器。web.py 實現了 WSGI 並能在任何兼容它的伺服器上運行。 WSGI 是一個web伺服器與應用程序之間的通用API, 就如Java 的 Servlet 介面。 你需要安裝 flup (download here) 使web.py 支持with CGI, FastCGI 或 SCGI, flup提供了這些API的WSGI介面。
對於所有的CGI變數, 添加以下到你的 code.py:
#!/usr/bin/env python
並運行 chmod +x code.py 添加可執行屬性。
LightTPD 在產品中通過FastCGI結合lighttpd是web.py使用的一種推薦方法。 reddit.com 通過該方法來處理百萬次的點擊。
lighttpd config設置參考如下:
server.moles = (mod_fastcgi, mod_rewrite)
server.document-root = /path/to/root/
fastcgi.server = ( /code.py =>
(( socket => /tmp/fastcgi.socket,
bin-path => /path/to/root/code.py,
max-procs => 1
))
)
url.rewrite-once = (
^/favicon.ico$ => /static/favicon.ico,
^/static/(.*)$ => /static/$1,
^/(.*)$ => /code.py/$1
)
在某些版本的lighttpd中, 需要保證fastcgi.server選項下的check-local屬性設置為false, 特別是當你的 code.py 不在文檔根目錄下。
如果你得到錯誤顯示不能夠導入flup, 請在命令行下輸入 easy_install flup 來安裝。
從修訂版本 145開始, 如果你的代碼使用了重定向,還需要在fastcgi選項下設置bin-environment變數。 如果你的代碼重定向到http://domain.com/ 而在url欄中你會看到 http://domain.com/code.py/, 你可以通過設置這個環境變數來阻止。 這樣你的fastcgi.server設置將會如下:
fastcgi.server = ( /code.py =>
((
socket => /tmp/fastcgi.socket,
bin-path => /path/to/root/code.py,
max-procs => 1,
bin-environment => (
REAL_SCRIPT_NAME =>
),
check-local => disable
))
)
Apache
使用 CGI
添加以下到 httpd.conf 或 apache2.conf。
Alias /foo/static/ /path/to/static
ScriptAlias /foo/ /path/to/code.py
.. 使用 CGI .htaccess
CGI很容易配置, 但不適合高性能網站。 添加以下到你的 .htaccess:
Options +ExecCGI
AddHandler cgi-script .py
將你的瀏覽器指向 http://example.com/code.py/。 不要忘記最後的斜杠,否則你將會看到 not found 消息 (因為在 urls 列表中你輸入的沒有被匹配到). 為了讓其運行的時候不需要添加 code.py, 啟用mod_rewrite 法則 (查看如下)。
注意: web.py 的實現破壞了 cgitb 模塊,因為它截取了 stdout。 可以通過以下的方法來解決該問題:
import cgitb; cgitb.enable()
import sys
# ... import web etc here...
def cgidebugerror():
_wrappedstdout = sys.stdout
sys.stdout = web._oldstdout
cgitb.handler()
sys.stdout = _wrappedstdout
web.internalerror = cgidebugerror FastCGI很容易配置,運行方式如同mod_python。
添加以下到 .htaccess:
<Files code.py> SetHandler fastcgi-script
</Files>
不幸的是, 不像lighttpd, Apache不能夠暗示你的web.py腳本以FastCGI 伺服器的形式工作,因此你需要明確的告訴web.py。 添加以下到 code.py的 if __name__ == __main__: 行前:
web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
將你的瀏覽器指向 http://example.com/code.py/。 不要忘記最後的斜杠,否則你將會看到 not found 消息 (因為在 urls 列表中你輸入的沒有被匹配到). 為了讓其運行的時候不需要添加 code.py, 啟用mod_rewrite 法則 (查看如下)。
Walter 還有一些額外建議. https://www.mems-exchange.org/software/scgi/ 從 http://www.mems-exchange.org/software/files/mod_scgi/ 下載 mod_scgi 代碼 windows apache 用戶: 編輯 httpd.conf:
LoadMole scgi_mole Moles/mod_scgi.so
SCGIMount / 127.0.0.1:8080
重啟apache,並在命令行中如下方式啟動code.py:
python code.py 127.0.0.1:8080 scgi
打開你的瀏覽器,訪問127.0.0.1 It's ok!
.. 使用 mod_python
mod_python 運行方式如同FastCGI, 但不是那麼方便配置。
對於 Python 2.5 按照如下:
cd /usr/lib/python2.5/wsgiref
# or in windows: cd /python2.5/lib/wsgiref
wget -O modpython_gateway.py http://projects.amor.org/misc/browser/modpython_gateway.py?format=raw
# or fetch the file from that address using your browser
對於 Python <2.5 按照如下:
cd /usr/lib/python2.4/site-packages
# or in windows: cd /python2.4/lib/site-packages
svn co svn://svn.eby-sarna.com/svnroot/wsgiref/wsgiref
cd wsgiref
wget -O modpython_gateway.py http://projects.amor.org/misc/browser/modpython_gateway.py?format=raw
# or fetch the file from that address using your browser
重命名 code.py 為 codep.py 或別的名字, 添加:
app = web.application(urls, globals())
main = app.wsgifunc()
在 .htaccess 中, 添加:
AddHandler python-program .py
PythonHandler wsgiref.modpython_gateway::handler
PythonOption wsgi.application codep::main
你應該希望添加 RewriteRule 將 / 指向 /codep.py/
確保訪問 /codep.py/ 的時候有添加最後的 /。 否則,你將會看到一條錯誤信息,比如 A server error occurred. Please contact the administrator.
.. 使用 mod_wsgi
mod_wsgi 是一個新的Apache模塊 通常優於mod_python 用於架設WSGI應用,它非常容易配置。
在 code.py 的最後添加:
app = web.application(urls, globals(), autoreload=False)
application = app.wsgifunc()
mod_wsgi 提供 許多可行方法 來實現WSGI應用, 但一種簡單的方法是添加以下到 .htaccess:
<Files code.py>
SetHandler wsgi-script
Options ExecCGI FollowSymLinks
</Files>
如果在apache的 error.log 文件中出現 ImportError: No mole named web, 在導入web之前,你可能需要在code.py中嘗試設置絕對路徑:
import sys, os
abspath = os.path.dirname(__file__)
sys.path.append(abspath)
os.chdir(abspath)
import web
同時, 你可能需要查看 WSGI應用的常見問題的 Application Working Directory 部分。
最終應該可以訪問 http://example.com/code.py/。
mod_rewrite 法則,Apache
如果希望 web.py 能夠通過 'http://example.com' 訪問,代替使用 'http://example.com/code.py/', 添加以下法則到 .htaccess 文件:
<IfMole mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/icons
RewriteCond %{REQUEST_URI} !^/favicon.ico$
RewriteCond %{REQUEST_URI} !^(/.*)+code.py/
RewriteRule ^(.*)$ code.py/$1 [PT]
</IfMole>
如果 code.py 在子目錄 myapp/中, 調整 RewriteBase 為 RewriteBase /myapp/。 如果還有一些靜態文件如CSS文件和圖片文件, 復制這些並改成你需要的地址。
⑨ 如何windows下nginx+django+flup python3
uWSGI不支持windows
所以求一份支持py3的flup。跟著網上的教程做並沒有成功,nginx和django都沒有問題,但是一加上fastcgi就不行了。用的flup是github上找的,我覺得應該就是flup的問題。不知道有沒有成功實現上述配置的指點一下。
另外,用manage.py運行fastcgi的時候,運行完了會給提示什麼的嗎?比如django本地伺服器會給個0errors..
輸入完運行指令,CMD窗口就不能執行其他操作了
⑩ 求flup python詳細資料,要文檔類的。謝謝大俠!
Is there any documentation?
The best documentation is the source. :) But no, there is no convenient, online-accessible documentation. However, most of the public classes/methods are pydoc-annotated.
sorry。flup官方說:flup不提供文檔,flup源代碼本身就是最好的文檔(瀑布汗 -_-!)