包含静态文件的Google App Engine服务

时间:2018-03-20 00:46:48

标签: python google-app-engine

我有一个带有service app.yaml文件的应用,如下所示:

# app.yaml
handlers:
- url: /dist/(.+)
  static_files: dist/\1
  upload: dist/(.+)

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

dispatch.yaml添加服务:

# dispatch.yaml
dispatch:
  - url: "*/apple/*"
    service: apple

但是apple服务本身只是一个带有一些javascript资产的静态html文件:

# apple.yaml
service: apple

handlers:
- url: /dist/(.+)
  static_files: dist/\1
  upload: dist/(.+)

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

问题是,如果我转到www.example.com/applemain.js引用的index.html文件找不到<script type="text/javascript" src="/dist/main.js"></script>,而index.html则是apple返回。

  

拒绝执行“https://www.example.com/apple/dist/main.js”脚本,因为其MIME类型(“text / html”)不可执行,并且启用了严格的MIME类型检查。

但是,如果我直接在https://apple-dot-example.appspot.com/浏览www.example.com/dist/main.js服务,那就可以了。

显然问题是如何路由静态文件。由于浏览器向www.example.com/apple/dist/main.js发出请求,而该文件实际上位于<script type="text/javascript" src="/apple/dist/main.js"></script>,因此该文件为404。

即使我将脚本更改为np.array([i for i in range(530)]),它也不起作用。

如果我有服务,如何为多个静态目录提供服务?

1 个答案:

答案 0 :(得分:3)

问题是您请求的路径实际上是/dist/main.js,它与apple服务调度规则模式不匹配:*/apple/* - 因此它被路由到{ {1}}服务。

要解决此问题,您需要:

  • 更新default文件中的模式(BTW应该调用apple.yaml以匹配您的调度服务名称):

    apple

    请注意,即使上面的上一条规则可以匹配任何内容,但如果路径中没有# apple.yaml service: apple handlers: - url: /apple/dist/(.+) static_files: dist/\1 upload: dist/(.+) - url: /.* static_files: dist/index.html upload: dist/index.html ,它实际上也不会获得请求,因为这些请求不会进入*/apple/*服务。

  • 使用更新的路径引用文件,以便调度程序可以将它们路由到apple服务:

    apple