有啥方法可以强制重置 App Engine 上的所有缓存静态文件?

Posted

技术标签:

【中文标题】有啥方法可以强制重置 App Engine 上的所有缓存静态文件?【英文标题】:Any way to force reset of all cached static files on AppEngine?有什么方法可以强制重置 App Engine 上的所有缓存静态文件? 【发布时间】:2012-08-10 13:43:00 【问题描述】:

我遇到了一个已知的 AppEngine 问题,如果我转到我的应用程序的特定 URL,则会缓存错误的静态内容,但如果我附加 ?foo 参数来破坏缓存,则会显示正确的静态内容,并且 VERSION .myapp.appspot.com 也可以。

有什么方法可以在未修改的 URL 上显示正确的内容?

我很乐意删除该应用程序并恢复它或任何激烈的事情。该应用程序尚未上线,但我需要它在几个小时内上线。使这些 URL 正常工作的任何方法,以便与 AppEngine 应用程序对话的移动应用程序获取正确的数据。

编辑

卷曲标题,我看到了:

HTTP/1.1 200 OK
ETag: "ZN9VxQ"
Date: Tue, 14 Aug 2012 02:00:58 GMT
Expires: Wed, 15 Aug 2012 02:00:58 GMT
Content-Type: text/html
Server: Google Frontend
Cache-Control: public, max-age=86400
Age: 34623
Transfer-Encoding: chunked

我是否又被冲洗了 50,000 秒?无论如何要缩短它?

编辑评论:

在 app.yaml 中,我有这个处理程序:

- url: /static
  static_dir: static
  expiration: 1s

我现在尝试删除过期:

- url: /static
  static_dir: static

我根据文档将它添加到 app.yaml 的顶部:

default_expiration: "1m"

此外,删除文件不会使它们在我部署时消失。

【问题讨论】:

您是否使用自定义域。如果是这样,您将需要使用缓存破坏技术,因为 google 边缘缓存将发挥作用。 如果是这种情况,缓存会持续多久?而且我不确定...我只是在使用 myapp.appspot.com,但是在处理此问题后,我的同事确实注册了一个域以重定向到该 URL...这有关系吗? 是否可以在 app.yaml 中有某种处理程序来将基本 url 重定向到非缓存的静态 url?我可以在不修改移动应用正在访问的 URL 的情况下进行缓存清除吗? 第一步是确定它是边缘缓存。使用 wget/curl 在 apppot 和自定义域之间比较结果。 自定义 URL 实际上只是 404,这有关系吗? 【参考方案1】:

有一种方法可以缩短您的应用在 Google Cloud 上缓存的静态文件的过期时间。

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

通过单击“添加规则”按钮创建新规则。对于对象条件,选择only“Newer version”选项并将其设置为1。不要忘记单击“Continue”按钮。对于该操作,选择“删除”并单击“继续”按钮。保存您的新规则。

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

【讨论】:

【参考方案2】:

这取决于所使用的缓存控制。检查 firebug och chrome 检查器并查看设置的到期日期。

如果您已将缓存控制设置为公共,则无法影响该控制,因为文件在此过程中缓存在各种代理和服务器上。

如果您使用缓存控制私有,您应该能够重置您的浏览器缓存并且没问题,但正如您所说,有时您会从 Google 的生产环境中获取错误的文件。我有同样的问题。最快的解决方案是在加载的文件中添加查询参数。

【讨论】:

这不是答案,请查看上面的答案

以上是关于有啥方法可以强制重置 App Engine 上的所有缓存静态文件?的主要内容,如果未能解决你的问题,请参考以下文章

App Engine:如何“重置”数据存储区?

Google Cloud 中的 Google Compute Engine、App Engine 和 Container Engine 有啥区别?

如何从本地 Google App-engine 数据存储中删除所有实体?

是否可以防止 Google App Engine 上的 DoSing?

Firebase 托管 - 强制浏览器在新部署时重置缓存?

如何配置 Google App Engine app.yaml 文件以强制 https