我有一个现有的 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
以生成资源路径。
相反,只有实际的目录名称才重要。
您有一个文件
<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
,因为后者用于您的默认服务。