使用 Google App Engine 和 bottle 提供静态 HTML

Serving static HTML with Google App Engine and bottle

我将 Google App Engine 与 bottle.py 一起使用,并尝试在用户访问 / 时提供静态 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]

下面的代码应该可以工作。

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

要在 App Engine 中提供静态文件,直接从 app.yaml 执行此操作是迄今为止最有效的方法(对您的用户而言速度更快,并且如果您超过了免费的每日配额,对您而言成本更低)——只是添加

- url: /
  static_files: static/index.html

app.yaml "catch-all" url: /.* 指令之前。

这样,您的应用程序就不会在其他可能正在等待的静态文件请求之后排队,也不需要启动和预热新实例,也不需要 运行 您的任何代码-- 它只会将静态文件提供给用户 pronto,就像 Google 知道的一样快(包括缓存和类似 CDN 的加速 "behind the curtains" as/if 适用)。

确实没有理由从代码中提供静态文件,因为您可以轻松利用 Google 自己的服务基础设施!