Google App Engine 入门: Hello World
(本文译自:Google App Engine Getting Started)
Google App Engine 应用通过 CGI 标准协议与服务器通讯.这是一个标准的Http处理流程,Web服务接受到客户端发来的Get或Post请求,web服务器把请求转发给你的应用程序,由应用程序来处理要输出的内容。
为了更好的理解这个过程,下面就开始开发我们经典的Hellow World应用程序吧。在这一章,仅仅只是实现显示一些简单的信息的功能。
创建一个简单的 Request Handler
首先创建一个名为 helloworld 的文件夹。 除非特殊说明,以后所有关于这个应用程序的文件都将放在这个文件夹里面。
在helloworld 文件夹里, 创建一个新文件 helloworld.py,文件内容如下:
print 'Content-Type: text/plain' print '' print 'Hello, world!'
这个Python 脚本处理一个request请求,并且设置一个Http header,输出一个空行和一段信息 Hello, world!.
创建配置文件
每个App Engine application 都包含一个名为 app.yaml的配置文件。 在这个配置文件中,可以设置具体的某个URL需要用哪个Python脚本来处理.
现在,在 helloworld 文件夹中,创建一个新的 app.yaml 文件,输入以下内容:
application: helloworld version: 1 runtime: python api_version: 1 handlers: - url: /.* script: helloworld.py
这个配置文件描述了以下内容::
- 这个应用程序的标识是
helloworld. 这个标识需要和你在App Engine网站上创建的应用程序标识保持一致。在开发期间你可以使用任何你喜欢的名字,但是上传的时候,必须要和你在App Engine 注册的标识保持一致。现在,我们把它设置为helloworld. - 你的应用程序的版本号为
1,如果你在上传应用之前修改了这个编号, App Engine 将会自动保留前一个版本的副本,以方便你可以在管理平台中将当前版本恢复成原来的版本。 - 该应用运行在
python环境, 环境版本是 1. 目前只有Python可选,将来会提供更多的运行环境和开发语言. - 所有符合正则表达式
/.*(所有URL) 的请求,都由helloworld.py脚本来处理.
该配置文件使用 YAML语法. 关于该配置文件的更多选项, 请参考 the app.yaml reference.
测试应用程序
现在这个应用程序已经基本上完整了。 你可以在本地App Engine SDK环境中进行模拟运行测试。
首先,指定应用路径为 helloworld 目录,使用下面的命令启动测试环境Web服务程序,:
google_appengine/dev_appserver.py helloworld/
这个Web服务程序将监听8080端口. 你可以在浏览器中输入以下地址进行测试:
关于这个web服务程序的更多选项(如怎样修改默认端口等), 请查看the Dev Web Server reference, 或者使用命令行选项 --help.
无需中断你的开发
在开发过程中,你不需要不停的重启Web服务程序。Web服务程序可以自行判断哪些脚本文件已经被修改过了,并且重新加载这些脚本。
试一试: 不要关闭web服务程序, 编辑 helloworld.py 将 Hello, world! 修改成其他内容. 重新访问http://localhost:8080/ ,看看是不是您的修改已经生效了!
要关闭Web服务程序,您只需在控制台中按下 Control-C (或其他有效的 "break" 功能键).
PS:在以后的入门指导中,你可以让你的Web服务程序一直开着 。
接下来...
我们已经开发了一个完整的web应用程序!你可能迫不及待的就想把这个程序发布出去,并分享给你的朋友了。且慢,还是让我们给它增加一些功能后再这样做吧,毕竟它太简陋了。
下一章: 使用 Webapp Framework.
C:\Program Files\Google\google_appengine>dev_appserver.py helloworld/
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 55, in
execfile(script_path, globals())
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
erver_main.py", line 358, in
sys.exit(main(sys.argv))
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
erver_main.py", line 306, in main
config, matcher = dev_appserver.LoadAppConfig(root_path, {})
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
erver.py", line 2681, in LoadAppConfig
raise AppConfigNotFoundError
google.appengine.tools.dev_appserver.AppConfigNotFoundError
请问徐老师,以上问题怎么解决?
C:\Program Files\Google\google_appengine>
TO:craftsman
你用得python版本可能是2.6版的。但是现在的appengine支持的版本为2.5版的。
所以改用python2.5就可以了。
你没有权限上传文件,请修改app.yaml中的应用名
C:\>appcfg.py update helloworld/
C:\Program Files\Google\google_appengine\appcfg.py:40: DeprecationWarning: the s
ha module is deprecated; use the hashlib module instead
EXTRA_PATHS = [
Loaded authentication cookies from C:\Documents and Settings\Administrator/.appc
fg_cookies
Scanning files on local disk.
Initiating update.
2008-11-01 10:31:56,592 ERROR appcfg.py:1128 An unexpected error occurred. Abort
ing.
Error 403: --- begin server output ---
You do not have permission to modify this app (app_id=u'helloworld').
--- end server output ---
我的本地已经运行OK了,但是上传到google的时候出现这个问题,不知道怎么回事。
yaml配置文件最后一行script前面空二格就可以了,祝大家好运
非常感谢admin的回答。就是您说的原因。
请在helloword同级目录执行上述命令,需要保证后面的路径是正确的
运行 google_appengine/dev_appserver.py helloworld/ 出现如下信息到底对不对啊?为什么我的http://localhost:8080/ 访问不了? C:\Documents and Settings\Administrator>dev_appserver.py helloworld/ Traceback (most recent call last): File "D:\Program Files\Google\google_appengine\dev_appserver.py", line 55, in
execfile(script_path, globals())
File "D:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
erver_main.py", line 358, in
sys.exit(main(sys.argv))
File "D:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
erver_main.py", line 306, in main
config, matcher = dev_appserver.LoadAppConfig(root_path, {})
File "D:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
erver.py", line 2636, in LoadAppConfig
raise AppConfigNotFoundError
google.appengine.tools.dev_appserver.AppConfigNotFoundError
C:\Documents and Settings\Administrator>
Unknown url handler type. in "helloworld\app.yaml", line 7, column 1 这个问题是因为少了两个空格,把 handlers: - url: /.* script: helloworld.py 改为 handlers: - url: /.* script: helloworld.py 就可以了
对了, 好像你这儿的代码, 英文引号都被换成了中文引号, 新手照抄的话肯定不知道怎么出错的。 改一改吧
yaml文件配置有误,这是一个格式非常严格的文件,"aaa: bbb" 中间必须要有一个空格,你看看是否是这个问题
我错误提示如下,请指教。 D:\program files\Google\google_appengine>dev_appserver.py helloworld ERROR 2008-06-06 14:46:13,844 dev_appserver_main.py] Fatal error when loading application configuration: Invalid object: Unknown url handler type. in "helloworld\app.yaml", line 7, column 1
文件夹在哪里创建都没有关系,如果使用dev_appserver.py helloworld/ 这种形式的话,应该当前是在helloworld的上一级目录,并且要保证dev_appserver.py能够正确执行
还有,您说创建helloworld 文件夹,在那个目录下创建?还是在那个目录下创建都可以?
我出了这个错误: file"",line google_appengine/dev_appserver.py helloworld/ 怎么回事?
app.yaml文件有误, 你也可以看看,是否是配置了静态文件夹的原因 http://xuming.net/2008/05/gae-static_dir.html
我的出这个错误。。搞不懂了 D:\Program Files\Google\google_appengine>dev_appserver.py hello/ ERROR 2008-06-03 13:19:28,454 dev_appserver_main.py] Fatal error when loading application configuration:
是的,前提是要保证Python2.5已经正确安装,并且已经把Python.exe的路径加入到windows环境变量之中。
越改越乱,呵呵。 D:/python25/python google_appengine/dev_appserver.py helloworld/
代码漏了,立即改正: D:\python25、python google_appengine/dev_appserver.py helloworld/