【问题标题】:App Engine: Static Files Not Updating on DeployApp Engine:部署时未更新静态文件
【发布时间】:2016-01-18 08:14:09
【问题描述】:

我使用以下设置推送了一个包含 Angular SPA 的 HTML 静态文件作为我的自定义域的包罗万象的处理程序:

- url: /(api|activate|associate|c|close_fb|combine|import|password|sitemap)($|/.*)
  script: gae.php

- url: /.*
  static_files: public/static/app/v248/es/app.html
  upload: public/static/app/v248/es/app.html
  expiration: "1h"

效果很好,但如果我推送新的 app.html,它不会更新。我尝试更改本地路径,部署新的应用程序版本,甚至用自定义 php 端点替换 catch-all 处理程序,但它不起作用,响应仍然是我上传的 app.html 的第一个版本。

其他人也遇到过同样的问题 (CSS File Not Updating on Deploy (Google AppEngine)),它看起来与 Google CDN 缓存有关,但据我所知,没有办法刷新它。

【问题讨论】:

  • 您确定这是 Google 的 CDN 缓存而不是您的网络浏览器吗?
  • 100% 确定,这是我尝试的第一件事

标签: google-app-engine caching google-cloud-platform


【解决方案1】:

有一种方法可以刷新您的应用在 Google Cloud 上缓存的静态文件。

前往您的Google Cloud Console 并打开您的项目。在左侧汉堡菜单下,前往存储 -> 云存储 -> 浏览器。您应该在那里找到至少一个 Bucket:your-project-name.appspot.com。在 Lifecycle 列下,单击与 your-project-name.appspot.com 相关的链接。删除任何现有规则,因为它们可能与您现在将创建的规则冲突。

通过单击“添加规则”按钮创建新规则。对于操作,选择“将存储设置为近线”。对于对象条件,选择only“Number of newer versions”选项并将其设置为1。单击“Continue”按钮,然后单击“Create”。

这条新规则最多需要 24 小时才能生效,但至少对我的项目来说只需要几分钟。一旦启动并运行,您的应用在 your-project-name.appspot.com 下提供的文件版本将始终是最新部署的,从而解决问题。此外,如果您经常编辑静态文件,则应从与这些静态文件相关的处理程序中删除任何 expiration 元素,并从 app.yaml 文件中删除 default_expiration 元素,这将有助于避免其他服务器意外缓存。

【讨论】:

  • 这个描述可能是旧的;我没有看到任何“较新版本”选项。
  • 我不再使用 GCP,但我去那里查看自发布此答案以来发生了什么变化。其实,不多。 1) 在左侧汉堡菜单下,前往存储 -> 云存储 -> 浏览器。 2)按照答案中的说明转到生命周期规则。 3) 保持选中“将存储类设置为 Nearline”操作。 4)对于对象条件,只选择“Number of newer versions”选项并将其设置为1。就是这样。
  • 这个答案 +1 构成了最终对我有用的解决方案的基础,这里记录了 - stackoverflow.com/a/69781887/1205871 - 它基本上更详细地介绍了这种方法
【解决方案2】:

在 App Engine 应用程序中对静态文件执行更改时,由于cache,更改不会立即可用,正如您已经想象的那样。谷歌云中的缓存不能手动刷新,所以如果你想测试它是如何工作的,我建议你将过期时间更改为更短的时间(默认为 10 分钟),然后根据设置适当的过期时间满足您的要求。

请记住,您可以更改for all static files 或仅the ones you choose 的静态缓存过期时间,只需在 app.yaml 文件中设置适当的元素即可。

【讨论】:

  • 没错,但即使更改已缓存文件的过期时间也不会影响它们,直到它们过期。正如您所指出的,没有办法刷新 Google Edge Cache。
  • 就是这样,你是对的。如前所述,我只能建议您出于测试目的降低过期时间,然后再次设置更合适的值。
【解决方案3】:

2020 年更新:

对于我的应用程序,我发现当我在版本列表中到达 50 Versions 时,App Engine 开始无法检测到我的最新应用程序部署。

查看(汉堡菜单)-> App Engine -> 版本

在下次部署时删除一堆旧版本后,它立即获取了我的最新更改。不确定这是否特定于我的帐户或计费设置,但这为我解决了问题。

【讨论】:

    【解决方案4】:

    我通过 Google Cloud Platform 中的服务获取静态文件。我的问题是我没有执行

    gcloud app deploy dispatch.yaml
    

    一旦执行,一切都很好。希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-23
      • 2021-05-14
      • 2018-03-23
      • 2020-10-14
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 2013-10-23
      相关资源
      最近更新 更多