在 Google AppEngine 上使用前缀 url 提供静态文件

问题描述 投票:0回答:1

我有一个现有的 GAE 服务(默认),并且我正在添加一个新服务(管理员)。这是使用python3.8,gunicorn和flask。

我有一个dispatch.yaml 文件,它将带有

/admin
的请求重定向到新服务。我在新服务中写入
app.yaml
以便仅响应带有此前缀的网址。

目录结构有点乱,不过如下:

<root>
| app.yaml
| dispatch.yaml
| main.py
| static
| | css
| | | x.css
| | | y.css
| admin
| | admin_service.yaml
| | main.py
| | static
| | | main.css

admin_service.yaml
看起来像这样:

runtime: python38
service: admin

handlers:
- url: admin/static
  static_dir: static

- url: /admin/.*
  script: auto

问题是:当我在本地或在 GAE 上运行 admin_service 时,它无法找到我的静态资源。对

<server>/admin/static/main.css
的请求返回 404,但
<server>/static/main.css
返回我的文件。但这并没有帮助,因为对此服务的所有请求都必须位于
/admin/
前缀下。

我尝试了很多变体,包括使用

static_files
,但遇到了同样的问题。

我预计

/admin/static
将被解释为前缀,并且此后的所有内容都将附加到
static_dir
以生成资源路径。

相反,只有实际的目录名称才重要。

flask google-app-engine gunicorn static-files
1个回答
0
投票

您有一个文件

<server>/admin/static/main.css
并且您希望以
/admin/static
开头的任何内容都由您定义的静态路径处理程序处理。因此,您的网址路径应为
/admin/static
,您的目录应为
static/

- url: /admin/static
  static_dir: static/

此外,您应该确保,如果您在管理页面上为静态文件使用相对网址,它们最终会得到完整的网址

<server>/admin/static/main.css
而不是
<server>/static/main.css
,因为后者用于您的默认服务。

© www.soinside.com 2019 - 2024. All rights reserved.