繁体   English   中英

带有静态文件的Google App Engine服务

[英]Google App Engine service with static files

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

# 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/appleindex.html引用的main.js文件作为<script type="text/javascript" src="/dist/main.js"></script>找不到<script type="text/javascript" src="/dist/main.js"></script> ,而是返回index.html

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

但如果我直接在https://apple-dot-example.appspot.com/浏览apple服务,它就可以了。

显然问题是如何路由静态fils。 由于浏览器向www.example.com/dist/main.js发出请求,而该文件实际上位于www.example.com/apple/dist/main.js因此它是404ed。

即使我将脚本更改为<script type="text/javascript" src="/apple/dist/main.js"></script> ,它也不起作用。

我有服务时如何为多个静态目录服务?

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

要修复它,您需要:

  • 更新apple.yaml文件中的模式(BTW应该调用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服务:

     <script type="text/javascript" src="/apple/dist/main.js"></script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM