有什么方法可以强制重置AppEngine上所有缓存的静态文件?

时间:2012-08-14 09:23:49

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

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

有没有办法让未修改的网址显示正确的内容?

我很乐意删除应用并恢复它或任何激烈的东西。该应用程序不是现场,但我需要它在几个小时内。任何可以使这些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

我又冲了500秒?无论如何缩短那个?

编辑评论:

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

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

我现在尝试删除过期时间:

- url: /static
  static_dir: static

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

default_expiration: "1m"

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

2 个答案:

答案 0 :(得分:7)

这取决于使用的缓存控制。检查firebug och chrome检查员并查看设置的失效日期。

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

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

答案 1 :(得分:4)

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

前往您的Google Cloud Console并打开您的项目。在左侧汉堡菜单下,转到“存储”->“浏览器”。在这里,您应该至少找到一个存储桶:your-project-name.appspot.com。在“生命周期”列下,单击有关your-project-name.appspot.com的链接。删除所有现有规则,因为它们可能会与您现在创建的规则冲突。

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

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