我遇到了一个已知的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"
此外,删除文件不会使我在部署时消失。
答案 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
元素,这将有助于避免意外缓存其他服务器。