最近在這個博客,我開始用這樣帶"/"的標題,原因是方便搜索.因為網上關于python的資料實在是少的可憐.能多做點貢獻就多做點貢獻吧,大家一起努力
話說前端時間藍色理想的一個朋友給了我一份DreamHost的空間,于是我的python就有用武之地了.結果...折騰了快一個星期,才把這個python搞定,現在大家看這個網址: http://181920.net 就是用web.py輸出的結果.
讓我們從頭開始,在DreamHost的空間上裝個web.py
前期準備
工欲善其事,必先利其器.要在DreamHost上裝個web.py得準備下列工具:
如何能操縱服務端
這個可以想象一下遠程連接是怎么回事.一般DreamHost的用戶會有一個帳號用來遠程登陸到服務端,然后就可以進行一些操作.下載需要的文件,安裝文件,配置apache服務器,配置mysql服務器等等等等.如果你要問你配置了你的,會不會影響到別人.我想應該是不會影響的.
關于putty
putty是DreamHost推薦使用的工具.用來輸入命令和服務端交互.稍微小白些的解釋,就是你通過putty和服務端連接,然后輸入一些命令行,可以操作服務端的文件什么的.類似于在本機用cmd打開的命令行提示符那樣的操作.
看這里的介紹: http://wiki.dreamhost.com/Putty
可以在這里下載: http://www.chiark.greenend.org.uk/~sgtatham/putty/
安裝后打開putty,會讓你輸入服務器地址,這個地址是用戶名@主機名,選擇ssh登陸,完成后打開,會提示你輸入密碼.注意這個時候你開始在鍵盤敲你的密碼,但是在putty的界面上并不會顯示什么,直到你輸入完密碼,按回車.如果密碼正確,就會出來一個歡迎界面,否則putty就會提示密碼錯誤,要求再次輸入.還有一種情況是密碼正確了,但是putty自動關閉了.這是因為你的賬戶還沒有使用shell的權限,需要到用戶面板開通一下.
然后就是開始輸入命令了,一些常用的命令,比如dir顯示當前目錄,cd進入到某個目錄,mkdir新建文件夾,wget遠程下載,tar解壓縮...
基本明白了吧.
還有,如果要在里面粘貼文本,只要點擊一下右鍵就可以.
關于ftp和關于IDLE
省略了.
開始安裝web.py
基本上就是打開這個頁面 http://wiki.dreamhost.com/Web.py 照著一步一步的來.
我在這里來個難點解說.
應該在哪個目錄下?
是在你的web主目錄下
我不用python2.4怎么辦?
改成#!/usr/bin/env python2.3 就可以.
怎么修改web.py's web/wsgi.py?
這個其實挺費了一番功夫,一開始沒看明白那些加加減減是什么意思,后來明白過來,就是打開wsgi.py這個文件,把runfcgi()里面的兩句替換一下.
import flup.server.fcgi as flups
return flups.WSGIServer(func, multiplexed=True, bindAddress=addr).run()
替換成
import fcgi as flups
return flups.WSGIServer(func, multiplexed=False, bindAddress=addr).run()
要注意不要有多余的空格.
怎么使用vim命令修改.htaccess?
首先是敲入vim .htaccess
然后復制那一段,貼上去.然后檢查下對不對.我復制粘貼的時候經常會把一開始Options的字母"O"給弄丟了,仔細檢查下.沒問題后,摁鍵盤上的ESC鍵,這個時候就進入命令模式,在輸入":X",這是保存退出的意思.這就可以了.
如果不放心,可以在使用vim .htaccess命令,這個時候一般會提示文件已經存在,讓你選擇打開的模式,用只讀模式看下有沒有問題吧.
大家可以看看這個文章,我覺得挺好的: http://man.lupaworld.com/content/manage/ringkee/vim.htm
關于FCGI和web.py
在DreamHost的web.py是這么運行的:
web請求->apache->FCGI->web.py->.cgi程序頁.
我不知道對不對,暫且這么理解吧.
但是如果你是和我一樣,在用windows,那就會覺得有這樣的問題:在本地如何編寫程序,然后傳到服務端看效果.因為我覺得是在本地在裝apache和fcgi會是非常麻煩的事情,不如直接雙擊.py文件就自動啟動一個web server簡單啊.
后來我發現其實是可以實現的.我們來對比下web.py的程序和web.py+fcgi的程序,不同的就是最后如何解析文件:
web.py:
if __name__=='__main__':
web.run(urls,globals())
web.py+fcgi:
def runfcgi_apache(func):
web.wsgi.runfcgi(func, None)
if __name__ == "__main__":
web.wsgi.runwsgi = runfcgi_apache
web.run(urls, globals())
所以,我們只管在本地寫我們的程序,最后上傳到服務端的時候,就把最后的webrun部分改一下就可以.
稍微麻煩了些,但是比較簡單快速的辦法
其他
另外,我現在還是運行python2.3,我已經裝了python2.5,但是還不清楚該怎么調用.需要再研究下.
暫時記得起來的問題就這么多,以后有需要了再補充.