部署后不会立即更改为静态文件

时间:2018-10-24 17:33:30

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

当我更改了静态文件(此处为page.html,然后运行appcfg.py update时,即使部署成功,并且说如果我curl为文件更改尚未真正进行。

我的app.yaml的相关摘录:

default_expiration: "10d"

- url: /
  static_files: static/page.html
  upload: static/page.html
  secure: always

Google的文档说“静态缓存过期-除非另行通知,否则Web代理和浏览器会在有限的时间内保留从网站加载的文件。” 不应存在任何浏览器缓存,因为我正在使用curl来获取文件,并且至少在家里没有设置代理。

答案的可能提示

有趣的是,如果我直接卷曲/static/page.html,它已经更新,但是如果我卷曲/,它应该指向同一文件,则不会更新。

此外,如果我添加一些虚拟的GET arg,例如/?foo,那么我还可以看到更新的版本。我还尝试在curl命令中添加-H "Cache-Control: no-cache"选项,但仍然得到陈旧的版本。

部署后如何立即查看/的更新?

2 个答案:

答案 0 :(得分:1)

根据static cache expiration上App Engine的文档,这可能是由于您和您的应用之间的服务器缓存考虑了响应中的缓存标头:

  

到期时间将在Cache-Control和Expires HTTP响应标头中发送,因此,文件很可能由用户的浏览器以及以及中间缓存代理服务器(如Internet Service)缓存。提供者

一旦在给定的缓存过期时间下传输了文件,即使您清除了浏览器缓存或使用带有no-cache选项的Curl命令,通常也无法从中间缓存中清除该文件。重新部署新版本的应用程序也不会重置缓存。

对于需要修改的文件,建议缩短到期时间。

答案 1 :(得分:1)

Omair 指出,Pyhton状态的标准环境docs指出“文件可能由用户的浏览器以及中间缓存的代理服务器缓存”例如Internet服务提供商”。但是我找到了一种方法来刷新您的应用程序在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元素,这将有助于避免意外缓存其他服务器。