Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 部署之间的Google前端保留_Google App Engine - Fatal编程技术网

Google app engine 部署之间的Google前端保留

Google app engine 部署之间的Google前端保留,google-app-engine,Google App Engine,部署期间静态资产的保留策略行为是否有任何定义 换句话说,如果我运行v1并部署v2,是否可以确保v1的资产可用于整个app deploy命令?我对定义多个服务特别感兴趣 我看过这些文章,但它们并没有对行为提供太多的见解 更具体地说,我有一个项目与3个服务 服务:资产,提供静态图像、css、js等,充当无cookie域 site.yaml-服务:默认,为“宣传册站点”提供静态html app.yaml-服务应用程序、go应用程序提供/healthz、/readyz和/a/* dispatch

部署期间静态资产的保留策略行为是否有任何定义

换句话说,如果我运行v1并部署v2,是否可以确保v1的资产可用于整个app deploy命令?我对定义多个服务特别感兴趣

我看过这些文章,但它们并没有对行为提供太多的见解

更具体地说,我有一个项目与3个服务

  • 服务:资产,提供静态图像、css、js等,充当无cookie域
  • site.yaml-服务:默认,为“宣传册站点”提供静态html
  • app.yaml-服务应用程序、go应用程序提供/healthz、/readyz和/a/*
  • dispatch.yaml-用于路线规范
我可以期望应用程序引擎有什么行为

  • 这两个静态文件在项目部署期间都可用
  • 这两个静态文件在服务部署期间都可用
  • 这两个静态文件将无限期地可用
  • 还要看情况吗

  • 首先,在应用程序级别没有部署,每个服务都是独立部署的。您只需通过在相同的CLI调用中同时(几乎)部署所有服务来模拟应用程序级部署,但从技术上讲,它们仍然是独立部署的

    静态文件的可用性由发布它们的服务版本的生命周期决定。因此,只要部署了
    asset
    服务的
    v1
    v2
    版本,
    css/bootstrap-4b2.min.css
    css/bootstrap-4b3.min.css
    都可能可用。但有一个转折点:这取决于服务的哪个版本接收请求——只有服务于特定版本文件的服务版本才应该/将服务于该文件版本。否则,服务的行为将不是确定性的——如果本地服务器上的404版本不提供文件服务,那么您总是会得到404,但在GAE上,您会得到404或文件,这取决于提供该文件服务的版本是否仍在部署,这将是一个bug

    决定哪个版本的服务接收请求取决于URL路由规则(请参阅-这是
    dispatch.yaml
    内容发挥作用的地方)和该服务的流量分布配置(请参阅和)

    例如,假设
    asset
    version
    v1
    配置为接收服务的所有流量。在这种情况下:

    • 请求
      https://your_app.appspot.com/css/bootstrap-4b2.min.css
      应该可以工作,
      v1
      通过
      dispatch.yaml
      规则获取请求
    • 请求
      https://your_app.appspot.com/css/bootstrap-4b3.min.css
      应返回404,
      v1
      通过
      dispatch.yaml
      规则获取请求
    • 请求
      https://v1-dot-assets-dot-your_app.appspot.com/css/bootstrap-4b2.min.css
      应该可以工作,
      v1
      通过软路由获取请求
    • 请求
      https://v1-dot-assets-dot-your_app.appspot.com/css/bootstrap-4b3.min.css
      应返回404,
      v1
      通过软路由获取请求
    • 请求
      https://v2-dot-assets-dot-your_app.appspot.com/css/bootstrap-4b2.min.css
      应返回404,
      v2
      通过软路由获取请求
    • 请求
      https://v2-dot-assets-dot-your_app.appspot.com/css/bootstrap-4b3.min.css
      应该可以工作,
      v2
      通过软路由获取请求
    如果在版本之间配置流量拆分,则上面列出的前2种情况中的结果可以反转,具体取决于请求所属拆分的百分比。但这通常不应该是一个问题,因为静态资产通常是从动态页面引用的,GAE试图将流量保持在同一个百分比内


    最后,以上所有内容都没有考虑缓存问题(在不同级别)。但是,只有在您修改文件内容的同时保留相同的文件名(即URL)时,这些才会影响您,这在本问题中并非如此。

    我们是否应该假设在从中提取的边缘位置没有缓存任何资产?您的
    dispatch.yaml
    文件的内容是什么?答案取决于它。@BrandOnTomson我不确定依赖缓存控制头是否理想,因为这是一个倒计时。如果我有一个300s的缓存控制,但我在299s部署它可能会导致有人在299s发出请求,接收v1的HTML和404的CSS。我将添加一个示例@DanCornilescu您能否澄清这将如何影响从前端添加/删除文件的行为?我认为它完全负责将静态_文件/上传的实际文件上传到Google Frontend或AppEngine的路由。我想我的答案是把资产和谷歌云存储放在一起,或者在资产URL的主机部分引用“版本”(但我希望包含所有内容),谢谢,这基本上回答了我的问题。我不希望缓存成为一个问题,因为请求的“根”是驱动资产请求的因素,并且资产将具有全局唯一的名称。我对陈旧的读取(例如v1 w/bootstrap-4b2.css)没有意见,但我想避免的是404,因为v1所需的资产不再存在。最安全的方法似乎是在部署中保留所有版本的资产。“首先,应用程序级别没有部署,每个服务都是独立部署的。您只需通过部署所有服务(几乎)来模拟应用程序级别的部署同时,在同一个CLI调用中,但从技术上讲,它们仍然是独立部署的。”我认为是这样,但不确定是否有 # dispatch.yaml # prod assets - url: "a.example.net/*" service: assets # local development assets - url: "*/css/*" service: assets # local development assets - url: "*/js/*" service: assets # local development assets - url: "*/media/*" service: assets - url: "*/a/*" service: app - url: "*/healthz" service: app - url: "*/readyz" service: app
    gcloud app deploy --project=$PROJECT dispatch.yaml assets.yaml default.yaml app.yaml --quiet --version $VERSION