我有一个 Flask 应用,我正在部署到谷歌应用引擎。
我一直在更改此应用程序中的 js 和 css 脚本,并将更新后的存储库部署到 gae。但是,当我在部署后重新加载 *.appspot.com
url 时,浏览器中加载的 js 和 css 文件不是最新版本。
我不确定如何解决这个问题。我不知道这是我的浏览器中的缓存问题、我的 app.yaml
文件问题还是其他问题。
当我在应用引擎中查看已部署文件时,css 和 js 是应该在浏览器中加载但没有加载的当前版本。
这是我的app.yaml
:
runtime: python27
api_version: 1
threadsafe: true
libraries:
- name: ssl
version: 2.7.11
handlers:
- url: /.*
script: app.app
我是 gae 的新手。如果有人有任何建议,那就太好了。
谢谢!
更新:
我已经根据@GAEfan 的建议和@Dave W. Smith 链接到的页面的建议添加到我的 app.yaml 文件中,现在它看起来如下:
runtime: python27
api_version: 1
threadsafe: true
libraries:
- name: ssl
version: 2.7.11
handlers:
- url: /.*
script: app.app
- url: /static
static_dir: static
expiration: '10s'
但是问题依然存在。我现在预计它可能与@Dave W. Smith 的其他建议有关,即“有旧实例在它们消失之前为请求提供服务。”
这是 GCP 平台的另一个屏幕截图,显示我的应用程序有多个实例正在运行,每个实例来自每个新的部署命令:
最新版本是默认版本,屏幕截图显示 100% 的流量分配在该版本上。我是否应该在每次部署时删除应用程序的旧版本?如果是这样,可以使用 gcloud
cli 来完成吗?有没有一种方法可以保留这些旧版本并确保静态文件肯定是从最新版本提供的?
再次感谢。
最佳答案
是的,听起来像是缓存问题。读这个:https://cloud.google.com/appengine/docs/standard/python/config/appref#static_cache_expiration
您可以通过为静态文件设置一个小的缓存时间来进行测试,如下所示:
- url: /static
static_dir: static/
expiration: '10s'
或者,更细化:
- url: /static/css
static_dir: static/css/
expiration: '10s'
- url: /static/js
static_dir: static/js/
expiration: '5m'
或全局通过:
default_expiration: '2s'
然后,当您对静态文件感到满意时,将缓存时间设置得更长一些,以加速您的站点并节省服务器时间。
关于google-app-engine - 正在提供的 Google App Engine 旧版本静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51125123/