Google App Engine 不提供静态文件

Posted

技术标签:

【中文标题】Google App Engine 不提供静态文件【英文标题】:Google App Engine not serving static files 【发布时间】:2017-08-15 07:03:29 【问题描述】:

我意识到这个问题已经被问过几次,但似乎没有一个解决方案有帮助。

我正在尝试使用 Flask 为我的网站提供一些基本的 html 和 CSS。 在 App Engine 上,Flask 正确地提供模板,但无法在 static/css 文件夹中找到样式表(我在开发者控制台的日志中收到 404)。

我的项目的相关结构是这样的:

/app
    /static
        /css
            style.css
    /templates
        home.html

我使用的命令是:

render_template('home.html')

在主python文件中,

<link rel="stylesheet" type="text/css" href=" url_for('static', filename='css/style.css') ">

在html中链接样式表。 我的 app.yaml 文件非常基础:

runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: main.app
- url: /static
  static_dir: static
  expiration: "7d"

现在,当我在 localhost 上运行它时,它可以正常工作,并且 url_for 函数可以正确获取样式表,但在 Google Cloud Platform 上却没有,尽管在“开发”选项卡中获取了正确的文件路径并具有正确的源代码,只有提供 HTML。 如果有帮助,这是我用来部署应用程序的命令:

 gcloud app deploy app.yaml --project my-project

我确定问题就在我面前,但我想不通。任何见解将不胜感激。提前谢谢你。

【问题讨论】:

【参考方案1】:

app.yaml 文件中处理程序的顺序很重要,您的 /static 永远不会被命中,因为它将首先与 /.* 模式匹配,您需要颠倒它们的顺序。

它在 localhost 上工作的事实可能是因为静态内容与应用程序代码一起可用,但在 GAE 上部署时情况并非如此 - 默认情况下静态内容位于其他地方并且应用程序代码无法访问。

【讨论】:

以上是关于Google App Engine 不提供静态文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google App Engine 上托管静态 HTML 文件?

在Google App Engine Standard中配置嵌套的静态文件夹 - PHP环境

使用 Google App Engine 将所有请求从一个域重定向到另一个域,但在 yaml 中保留静态路由规则

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

Google App Engine 和 404 错误

Google App Engine 上的静态 mp4 视频