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.
我的报错如下:
File "",line 1
google_appengine>dev_appserver.py helloworld/(字母d下面有一个尖尖)
请问怎么改这个错误啊?
哇塞 终于输出helloworld了 两个空格 这下记住了 !
只是warning应该没问题的,检查一下自己的代码吧
d:\Program Files\Google\google_appengine>dev_appserver site/
INFO 2009-01-23 16:51:45,334 appcfg.py] Server: appengine.google.com
INFO 2009-01-23 16:51:45,345 appcfg.py] Checking for updates to the SDK.
WARNING 2009-01-23 16:51:45,940 datastore_file_stub.py] Could not read datastor
e data from c:\users\admin\appdata\local\temp\dev_appserver.datastore
WARNING 2009-01-23 16:51:45,944 datastore_file_stub.py] Could not read datastor
e data from c:\users\admin\appdata\local\temp\dev_appserver.datastore.history
WARNING 2009-01-23 16:51:45,956 dev_appserver.py] Could not initialize images A
PI; you are likely missing the Python "PIL" module. ImportError: No module named
PIL
INFO 2009-01-23 16:51:45,969 dev_appserver_main.py] Running application fant
seer on port 8080: http://localhost:8080
http://localhost:8080在浏览器里无法显示页面啊
还有“datastore_file_stub.py] Could not read datastor
e data from c:\users\admin\appdata\local\temp\dev_appserver.datastore”
这是什么问题啊
新手一定要注意最后一行script前加两个空格
呀!!!!!!!
不好意思呀,不是来捣乱的,用chrom,提示出错,刷新一下却提交了那么多次,不好意思呀!
晕死,调了半表还是跟justin一样出错
晕死,调了半表还是:
D:\google_appengine\helloworld>dev_appserver.py helloworld/
Traceback (most recent call last):
File "d:\google_appengine\dev_appserver.py", line 55, in
execfile(script_path, globals())
File "d:\google_appengine\google\appengine\tools\dev_appserver_main.py", line
358, in
sys.exit(main(sys.argv))
File "d:\google_appengine\google\appengine\tools\dev_appserver_main.py", line
306, in main
config, matcher = dev_appserver.LoadAppConfig(root_path, {})
File "d:\google_appengine\google\appengine\tools\dev_appserver.py", line 2681,
in LoadAppConfig
raise AppConfigNotFoundError
google.appengine.tools.dev_appserver.AppConfigNotFoundError
晕死,调了半表还是:
“C:\Program Files\Google\google_appengine\helloworld>dev_appserver.py helloworld
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 50, in
execfile(script_path, globals())
File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
erver_main.py", line 351, in
sys.exit(main(sys.argv))
File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
erver_main.py", line 300, in main
config, matcher = dev_appserver.LoadAppConfig(root_path, {})
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
erver.py", line 2450, in LoadAppConfig
raise AppConfigNotFoundError
google.appengine.tools.dev_appserver.AppConfigNotFoundError”
晕死,调了半表还是:
C:\Program Files\Google\google_appengine\helloworld>dev_appserver.py helloworld
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 50, in
execfile(script_path, globals())
File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
erver_main.py", line 351, in
sys.exit(main(sys.argv))
File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
erver_main.py", line 300, in main
config, matcher = dev_appserver.LoadAppConfig(root_path, {})
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
erver.py", line 2450, in LoadAppConfig
raise AppConfigNotFoundError
google.appengine.tools.dev_appserver.AppConfigNotFoundError
晕死,调了半表还是:
C:\Program Files\Google\google_appengine\helloworld>dev_appserver.py helloworld
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 50, in
execfile(script_path, globals())
File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
erver_main.py", line 351, in
sys.exit(main(sys.argv))
File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
erver_main.py", line 300, in main
config, matcher = dev_appserver.LoadAppConfig(root_path, {})
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
erver.py", line 2450, in LoadAppConfig
raise AppConfigNotFoundError
google.appengine.tools.dev_appserver.AppConfigNotFoundError
晕死,调了半表还是:
C:\Program Files\Google\google_appengine\helloworld>dev_appserver.py helloworld
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 50, in
execfile(script_path, globals())
File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
erver_main.py", line 351, in
sys.exit(main(sys.argv))
File "C:\Program Files\Google\google_appengine\google/appengine/tools/dev_apps
erver_main.py", line 300, in main
config, matcher = dev_appserver.LoadAppConfig(root_path, {})
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
erver.py", line 2450, in LoadAppConfig
raise AppConfigNotFoundError
google.appengine.tools.dev_appserver.AppConfigNotFoundError
它本身的app.yaml文件格式是有问题的,最后那行的script之前要加两个空格,另外,py源文件的中文引号也应该改为英文状态的。这样改过之后就可以了。
dev_appserver.py helloworld/ 这个命令是对的,只不过你的app.yaml文件错误了
显示一下错误信息:
烦死了。
D:\google_appengine>dev_appserver.py helloworld/
ERROR 2008-11-29 08:08:04,983 dev_appserver_main.py] Fatal error when loading
application configuration:
Invalid object:
Unknown url handler type.
<URLMap
static_dir=None
secure=never
script=None
url=/.*
static_files=None
upload=None
expiration=None
login=optional
mime_type=None
>
in "helloworld/app.yaml", line 8, column 1
D:\google_appengine>google_appengine/dev_appserver.py helloworld/
'google_appengine' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
D:\google_appengine\helloworld>dev_appserver.py
Invalid arguments
Runs a development application server for an application.
dev_appserver.py [options]
Application root must be the path to the application to run in this server.
Must contain a valid app.yaml or app.yml file.
Options:
--help, -h View this helpful message.
--debug, -d Use debug logging. (Default false)
--clear_datastore, -c Clear the Datastore on startup. (Default false)
--address=ADDRESS, -a ADDRESS
Address to which this server should bind. (Default
localhost).
--port=PORT, -p PORT Port for the server to run on. (Default 8080)
--datastore_path=PATH Path to use for storing Datastore file stub data.
(Default c:\docume~1\justin\locals~1\temp\dev_appse
rver.datastore)
--history_path=PATH Path to use for storing Datastore history.
(Default c:\docume~1\justin\locals~1\temp\dev_appse
rver.datastore.history)
--require_indexes Disallows queries that require composite indexes
not defined in index.yaml.
--smtp_host=HOSTNAME SMTP host to send test mail to. Leaving this
unset will disable SMTP mail sending.
(Default '')
--smtp_port=PORT SMTP port to send test mail to.
(Default 25)
--smtp_user=USER SMTP user to connect as. Stub will only attempt
to login if this field is non-empty.
(Default '').
--smtp_password=PASSWORD Password for SMTP server.
(Default '')
--enable_sendmail Enable sendmail when SMTP not configured.
(Default false)
--show_mail_body Log the body of emails in mail stub.
(Default false)
--auth_domain Authorization domain that this app runs in.
(Default gmail.com)
--debug_imports Enables debug logging for module imports, showing
search paths used for finding modules and any
errors encountered during the import process.
--disable_static_caching Never allow the browser to cache static files.
(Default enable if expiration set in app.yaml)
D:\google_appengine\helloworld>dev_appserver.py helloworld/
Traceback (most recent call last):
File "d:\google_appengine\dev_appserver.py", line 55, in
execfile(script_path, globals())
File "d:\google_appengine\google\appengine\tools\dev_appserver_main.py", line
358, in
sys.exit(main(sys.argv))
File "d:\google_appengine\google\appengine\tools\dev_appserver_main.py", line
306, in main
config, matcher = dev_appserver.LoadAppConfig(root_path, {})
File "d:\google_appengine\google\appengine\tools\dev_appserver.py", line 2681,
in LoadAppConfig
raise AppConfigNotFoundError
google.appengine.tools.dev_appserver.AppConfigNotFoundError
打开 http://localhost:8080/没反应?
您需要查看dev_appserver执行环境里是否已经执行到Running application xxx on port 8080: http://localhost:8080
徐明 On 2008-11-27 at 09:51
你可以在helloworld目录下 执行"dev_appserver.py ." 试试
=====================================
我尝试了,但是用浏览器一打开 http://localhost:8080/ 之后还是没反应。显示:Internet Explorer 无法显示该页面
我试过,没有出现错误,下一版本吧这个加上
我修改你的micolog,在通过tag显示文章列表时候没有用时间排序。
所以我想自己就该,就是加一个 .order("-date") 但是不知道为什么,加上就出错误。而且又不提示什么错误,就说的什么 server error ......
你可以在helloworld目录下 执行"dev_appserver.py ." 试试