用于上传静态文件的 app.yaml 设置

Posted

技术标签:

【中文标题】用于上传静态文件的 app.yaml 设置【英文标题】:app.yaml settings for uploading static files 【发布时间】:2017-08-08 16:52:08 【问题描述】:

我的 Python App Engine 网络应用程序的 app.yaml 设置遇到问题。不知何故,除了我的应用程序中的 index.html 其余静态文件(javascript、CSS 和 HTML)之外,我没有将它们部署到应用程序引擎中。我在app.yaml 的脚本下尝试了static_filesupload 元素的各种组合。虽然其中一些在本地开发应用服务器上工作,但在通过gcloud app deploy 部署在应用引擎上时它们不工作。 gcloud 生成的日志没有显示任何错误。它们会为我的所有静态文件显示调试消息,例如“跳过 [...] 的上传”。

应用程序(它是一个AngularJS应用程序)的目录结构如下:

<APP ROOT>
├── app.yaml
├── my_scripts
│   ├── foo.py
│   └── ...
├── index.html
├── mainapp.py
└── web
    ├── assets
    │   ├── css
    │   │   ├── bootstrap.min.css
    │   │   ├── bootstrap-theme.min.css
    │   │   ├── ....
    │   │   └── ....
    │   └── js
    │       ├── app
    │       │   ├── app.js
    │       │   └── ....
    │       └── lib
    │           └── ...
    └── partials
        ├── login.html
        └── ...

以下是我的应用程序的 app.yml 文件。

runtime: python27
api_version: 1
threadsafe: true

handlers:

- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /(user|tasks)/.*
  script: mainapp.app

- url: /
  static_files: index.html
  upload: index.html

- url: /web
  static_files: web\/[^\n]*
  upload: web\/[^\n]*

- url: /web
  static_dir: web

任何能帮助我解决此问题的指针将不胜感激。

【问题讨论】:

看看***.com/questions/33447890/static-files-are-missing/…。查看解决该问题是否有助于在部署期间跳过静态文件。顺便说一句 - 是否有理由跳过它们显示在任何地方? 【参考方案1】:

您已更改路由顺序。也就是说,/web 应该在 / 处理程序之前出现,以便 GAE 路由首先寻找 /web,然后寻找 /(注意从上到下的顺序)。如果在/web 之前定义/,它总是显示index.html 文件,因为/ 也将匹配/web

handlers:

- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /(user|tasks)/.*
  script: mainapp.app

- url: /web
  static_dir: web

- url: /
  static_files: index.html
  upload: index.html

我也希望您没有将^web 添加到app.yaml 中的skip_files 部分

【讨论】:

其实/不会匹配/web,你可能会想/.*或者只是.* Regex / 应该针对字符串 /web 返回一个匹配对象 一个search 对象是的,但不是match 一个(在python 中re 谈话)。在实际的 GAE 项目中尝试一下。【参考方案2】:

以下处理程序配置对我有用:

- url: /(user|tasks)/.*
  script: mainapp.app

- url: /
  static_files: index.html
  upload: index.html

- url: /web
  static_files: web/(.*)/(.*)/(.*)/(.*)
  upload: web/(.*)/(.*)/(.*)/(.*)

- url: /web
  static_dir: web

【讨论】:

所以您是说/web/assets/css/bootstrap.min.css/web/assets/js/app/app.js 都使用此配置上传?

以上是关于用于上传静态文件的 app.yaml 设置的主要内容,如果未能解决你的问题,请参考以下文章

要在 Google App Engine 上托管静态 (HTML) 网站,app.yaml 文件中应该包含啥内容?

Django_设置静态文件上传文件

Django_设置静态文件上传文件

Gcloud 部署特定文件

Google App Engine 静态文件服务与应用程序冲突

Django 项目设置 Debug=False 后静态文件和上传文件404错误问题解决