Google App Engine无法提供静态文件

时间:2017-03-22 22:39:03

标签: python google-app-engine flask google-cloud-platform google-app-engine-python

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

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

我的项目的相关结构是:

/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 个答案:

答案 0 :(得分:6)

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

它在localhost上运行的事实可能是因为静态内容可以与应用程序代码一起使用,但是当部署在GAE上时却不是这样 - 默认情况下,静态内容会转移到其他地方并且无法通过应用程序代码访问。