我正在使用带有bottle.py的Google App Engine,并且在用户访问/
时尝试提供静态HTML文件。为此,我在main.py
:
bottle = Bottle()
@bottle.route('/')
def index():
"""Serve index.html."""
return static_file('index.html', root='/static')
我的app.yaml
:
handlers:
- url: /favicon\.ico
static_files: static/favicon.ico
upload: static/favicon\.ico
- url: /static
static_dir: static
application-readable: true
- url: /.*
script: main.bottle
favicon和CSS文件(都在static
目录中)可以正常使用,但不能直接提供。但是,转到/
会导致404错误。我对bottle.route
应该做些什么以及我应该在app.yaml
做些什么感到有些困惑。
为完整起见,我的目录结构如下所示:
src
+-- main.py
+-- app.yaml
+-- static
+-- favicon.ico
+-- index.html
+-- stylesheet.css
+-- [other unimportant files]
答案 0 :(得分:3)
要在App Engine中提供静态文件,它最有效率(对您的用户来说更快,如果您通过每日免费配额,对您来说成本更低)直接从app.yaml
执行此操作 - 只需添加< / p>
- url: /
static_files: static/index.html
到app.yaml
之前“catch-all”url: /.*
指令。
通过这种方式,您的应用程序不会将那些可能正在等待的静态文件请求排在后面,也不需要启动和预热新实例,也不会运行任何代码 - 它只是服务静态文件发送给用户 pronto ,就像Google知道的那样快(如果适用的话,包括缓存和幕后的CDN加速)。
当您可以轻松利用Google自己的服务基础架构时,没有理由从代码中提供静态文件!
答案 1 :(得分:0)
以下代码应该有效。
bottle = Bottle()
@bottle.route('/')
def index():
"""Serve index.html."""
return static_file('index.html', root=os.path.join(os.path.dirname(os.path.realpath(__file__)), "/static"))