代码之家  ›  专栏  ›  技术社区  ›  Eugene Brown

谷歌应用引擎正在提供的静态文件的旧版本

  •  2
  • Eugene Brown  · 技术社区  · 7 年前

    我有一个flask应用程序正在部署到Google应用程序引擎中。

    我一直在修改这个应用程序中的JS和CSS脚本,并将更新后的存储库部署到GAE中。但是,当我在部署后重新加载 >.appspot.com url时,浏览器中加载的JS和CSS文件不是最新版本。

    我不确定如何解决这个问题。我不知道这是否是我的浏览器中的缓存问题,是我的 a p p.yaml的问题 file或其他问题。

    当我在应用程序引擎中查看部署的文件时,css&js是应该在浏览器中加载但不加载的当前版本。

    这是我的 app.yaml

    运行时:python27 API_版本:1 螺纹安全:正确 库: -名称:ssl 版本:2.7.11 处理程序: -网址:/.。* 脚本:app.app

    我对盖伊还比较陌生。如果有人有什么好建议,那就太好了。

    谢谢!

    udpate:

    我已经根据@gaefan的建议将其添加到app.yaml文件中,并且链接到了页面@dave w.smith,因此现在它看起来如下所示:

    运行时:python27 API_版本:1 螺纹安全:正确 库: -名称:ssl 版本:2.7.11 处理程序: -网址:/.。* 脚本:app.app -URL:/静态 静态目录:静态 过期时间:“10秒”

    但问题依然存在。我现在希望这可能与@dave w.smith的其他建议有关,即“旧实例在请求失效之前一直在服务请求”。

    下面是gcp平台的另一个屏幕截图,显示我的应用程序正在运行多个实例,每个新的deploy命令中都有一个实例:

    最新版本是默认版本,屏幕截图显示100%的流量分配都在该版本上。我是否应该在每次部署时删除旧版本的应用程序?如果是,是否可以使用gcloudcli完成此操作?有没有一种方法可以保留这些旧版本,并确保静态文件绝对是从最新版本提供的?

    再次感谢。*.appspot.comURL部署后,浏览器中加载的JS和CSS文件不是最新版本。

    我不确定如何解决这个问题。我不知道这是否是我的浏览器中的缓存问题,是我的app.yaml文件或其他东西。

    当我在应用程序引擎中查看部署的文件时,css&js是应该在浏览器中加载但不加载的当前版本。

    enter image description here

    这是我的附录YAML以下内容:

    runtime: python27
    api_version: 1
    threadsafe: true
    
    libraries:
    - name: ssl
      version: 2.7.11
    
    handlers:
    - url: /.*
      script: app.app
    

    我对盖伊还比较陌生。如果有人有什么建议,那就太好了。

    谢谢!

    乳房:

    我已经根据@gaefan的建议将其添加到app.yaml文件中,并且链接到了页面@dave w.smith,因此现在它看起来如下:

    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平台的另一个屏幕截图,显示我的应用程序有多个正在运行的实例,每个新的deploy命令都有一个实例:

    Multiple versions/instances of my app running on google app engine

    最新版本是默认版本,屏幕截图显示100%的流量分配都在该版本上。我是否应该在每次部署时删除旧版本的应用程序?如果是这样,可以用gcloudCLI?有没有一种方法可以保留这些旧版本,并确保静态文件绝对是从最新版本提供的?

    再次感谢。

    3 回复  |  直到 6 年前
        1
  •  2
  •   GAEfan    7 年前

    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'
    

        2
  •  1
  •   Dave W. Smith    7 年前

    app.yaml ,你可以 您有静态文件,但应用程序正在提供这些文件。要使静电真正静止,您需要在我们的 .参见 https://cloud.google.com/appengine/docs/standard/python/getting-started/serving-static-files

        3
  •  1
  •   Gabriel H. Nunes    6 年前

    ,pyhton标准环境的文档声明 static cache expiration expiration 以及顶级元素 default_expiration Cache-Control Expires

    这里的问题是“重新部署新版本的应用程序将

    上面链接的相同文档指出,“如果您计划修改一个静态文件,它应该有一个短的(不到一个小时)过期时间。在大多数情况下,默认的10分钟到期时间是合适的”。这是我们应该考虑的问题 设置任何静态缓存过期。但对于像我这样的人, 我已经被这个问题抓住了,我找到了解决办法。

    为了这样做 Google Cloud Console

    单击“添加规则”按钮创建新规则。对于对象条件,选择

    来自app.yaml文件的元素,这有助于避免其他服务器意外缓存。