18

我遇到了一个已知的 AppEngine 问题,如果我转到我的应用程序的特定 URL,则会缓存错误的静态内容,但如果我附加一个 ?foo 参数来破坏缓存和 VERSION.myapp,则会显示正确的静态内容。 apppot.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"

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

4

2 回答 2

15

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

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

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

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

于 2018-10-28T16:17:45.697 回答
10

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

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

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

于 2012-08-14T11:00:28.760 回答