使用Google App Engine和瓶子提供静态HTML

时间:2015-03-25 01:11:29

标签: python google-app-engine bottle

我正在使用带有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]

2 个答案:

答案 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"))