歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 在GAE中使用web.py

在GAE中使用web.py

日期:2017/2/28 16:06:37   编辑:Linux教程

1 前言

GAE,全稱Google App Engine, 是一個由google提供的互聯網應用服務引擎,讓開發人員可以使用GAE的API開發互聯網程序,而不用擔心主機、帶寬等問題。自己也是剛剛接觸到GAE,尤其感興趣的是GAE能夠支持Python。於是趕緊注冊了GAE,鼓搗了一下午,搭建了GAE下的web.py開發環境。期間遇到了各種問題,還是多虧了Google大神,最後一一解決。於是把遇到的問題都總結下來,就成了這篇博文。

2 GAE的注冊,安裝

GAE的申請過程並不復雜,網上的教程也很多。下面簡單介紹一下整個流程:首先你需要注冊一個Gmail賬戶,然後到GAE的主頁http://appengine.google.com/ 上用這個賬戶填寫申請 。之後會有一個短信驗證的過程,需要填寫一個移動或聯通的手機號碼,(天翼的我試過了,的確什麼都收不到,後來換了個移動號,果然很快收到驗證碼)。填好驗證碼後,下一步填一下二級域名和應用程序的名字,提交後申請就成功。

下一步就是到http://code.google.com/intl/zh-CN/appengine/downloads.html 下載GAE SDK,目前官方只提供Java和Python兩個版本。我下載了GAE SDK for Python的Linux版本。windows版本是msi文件,直接點擊安裝即可,而Linux版本其實更簡單,說明文檔裡就一句“Unpack the zip file”,也就是直接解壓就完事了……

3 在GAE中使用web.py

GAE支持的Python版本是2.5,而我的Fedora 15上默認裝的是Python2.7.1,擔心會有兼容性問題,於是重新下載安裝了Python2.5。然後學著官網上的例子(看這裡http://code.google.com/intl/zh-CN/appengine/docs/python/gettingstarted/helloworld.html ), 寫了個最簡單的Hello World及其配置文件,放在HelloWorld文件夾下 。然後使用GAE SDK中提供的網絡服務器進行測試:

google_appengine/dev_appserver.py HelloWorld/

最初報錯:‘module’ object has no attribute ‘HTTPSHandler’, 原因是新裝的python2.5編譯的時候沒有包含ssl,所以重新編譯一下就好了,具體見此文:http://www.geektu.com/?p=78

然後又報錯:No module named _sqlite,檢查了一下,機子上有裝sqlite,google後,得知需要安裝sqlite-devel,之後重新編譯即可。

改掉這兩個錯誤之後,再次測試報錯出來個正則表達式,忘了copy下來。看了下明白原來應用程序名不能用大寫字母,於是改成helloworld。

之後又遇到了:google.appengine.tools.dev_appserver.AppConfigNotFoundError,這個錯誤是由於配置文件app.yaml出錯造成的,網上普遍提到的是文件名一定要是app.yaml,還在一篇博文裡看到說yaml的語法非常嚴格,連空格都不能錯(具體見這裡:http://blog.csdn.net/kyleinhustgs/article/details/3871031 ,未測試)。當時自己很混亂,把這文件改了又改,都沒搞清楚錯在哪,總之突然就好了……

helloworld 成功後,又拿了個的簡單web.py程序來做測試。沒想到一來就提示找不到web模塊,害得我還以為GAE不支持web.py。google後得知要把"/usr/local/lib/python2.5/site-packages/web" 這個目錄復制到應用程序的根目錄下去。問題果然解決。

但是程序依舊不能運行,報錯:ImportError: No module named flup.server.fcgi,google後得知在GAE中要將app.run()改成app.cgirun()才能運行。

最後一個問題是關於template,這個之前在web.py的官方cookbook上就有看到。(見這裡http://webpy.org/cookbook/templates_on_gae )。web.py的templetor需要把模板編譯成pyc字節碼,這需要訪問標准庫中的parser模塊。然而GAE禁用了這個模塊。因此必須對模板進行編譯,方法是:

python web/template.py --compile templates.py

注意這裡的web就是上面提到的復制過來的web,我最初沒有意識到,以為web是應用程序所在的目錄,於是遇到了一個“500 dude,This is whack”的錯誤,實在是讓人啼笑皆非,還有compile前面是兩個橫槓。編譯成功後放模板的templates文件夾下面會多一個__init__.py文件。以後一旦更改到模板,就必須重新編譯。

解決以上問題之後,我GAE上的第一個web.py程序終於跑起來了……

繼續努力,希望自己的第一個web.py應用盡早上線!

Copyright © Linux教程網 All Rights Reserved