我推送了网站的新版本,但现在 CSS 和静态图像无法正确部署。

这是混乱的页面: http://www.gaiagps.com

Appengine 显示最新版本是正确的: http://1.latest.gaiagps.appspot.com/

有什么帮助吗?

有帮助吗?

解决方案

我以前在应用程序引擎上看到过这一点,即使使用了诸如缓存的查询参数 /stylesheets/default.css?{{ App.Version }}.

这是我(未经证实的)理论:

  1. 您通过部署或更改新版本来推动新版本 default.
  2. 当此更新正在传播到运行您的应用程序的所有GAE实例时...
  3. ...有人登陆您的网站。
  4. 静态资源的请求 default.css{{ App.Version }} 被发送到Google的CDN,该CDN还没有。
  5. Google的CDN向GAE询问了从步骤#2的传播之前,所有实例都进行了资源。
  6. 如果您不幸,GAE会从运行旧版本的实例中提供资源...
  7. ...现在将其作为权威的“新版本”中的Google CDN缓存。

当这种情况发生时(如果发生的话),我可以确认没有任何限制缓存的浏览器工作将有所帮助。 Google CDN服务器持有错误的版本。

修理: 我发现解决此问题的唯一方法是部署另一个版本。您不会再次发生这种情况的风险(如果您从比赛条件开始没有进行任何CSS更改),因为即使发生了比赛条件,大概是您的第一个更新是在您部署第二次更新之前完成的因此,无论如何,所有实例都将提供正确的版本。

其他提示

以下是对我有用的东西。

  1. 从静态域中服务您的CSS文件。这是由GAE自动创建的。

    //static. {your-app-id} .appspot.com/ {css-file-path}

  2. 部署您的应用程序。此时,您的应用程序将被打破。

  3. 更改CSS文件的版本

    //static. {your-app-id} .appspot.com/ {css-file-path}?v = {version-name}

  4. 再次部署。

每次更改CSS文件时。您将不得不重复2,3和4。

您的链接对我来说很好,除非我错过了什么。

您可能已经缓存了旧的CSS,并且在更新之后没有获得新的CSS。尝试清除浏览器缓存,看看是否有效。

到1.latest下载新的CSS,因为它不在您的缓存中,因此它对您来说是正确的。

我也有这个问题。我当时在盖ga中使用烧瓶,所以我没有静态处理程序 app.yaml. 。当我添加它时,部署起作用。尝试添加类似的东西

handlers:
- url: /static
  static_dir: static

给你 app.yaml 并再次部署。它对我有用。显然,Google试图通过不更新认为用户看不到的文件来优化。

如发现 , ,Pyhton State标准环境的文档,这两个设置 静态缓存到期, ,单个元素 expiration 和顶级元素 default_expiration, ,负责定义“将发送的到期时间 Cache-ControlExpires HTTP响应标头“。这意味着“文件可能会由用户的浏览器以及中间缓存代理服务器(例如Internet服务提供商)缓存”。

这里的问题是“重新部署该应用的新版本将 不是 重置任何缓存”。因此,如果已经设置 default_expiration 例如,例如15天,但要更改CSS或JS文件并重新删除该应用程序,因此无法保证这些文件会因活动缓存而自动提供,尤其是由于中间缓存的代理服务器,这可能会可能包括Google Cloud Server-自访问your-project-name.appspot.com也是如此过时的文件以来,似乎是这种情况。

上面链接的相同文档指出:“如果您打算修改静态文件,则该文件应有短的(不到一小时)到期时间。在大多数情况下,默认的10分钟到期时间是适当的”。那是人们应该考虑的事情 设置任何静态缓存到期。但是对于那些喜欢我的人 事先不知道所有这些 并且已经被这个问题抓住了,我找到了一个解决方案。

即使文档指出不可能清除那些中间缓存代理,但至少可以删除Google Cloud Cache。

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

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

这个新创建的规则将需要长达24小时才能生效,但至少对于我的项目,只需几分钟。启动并运行后,您的应用程序将在您的project-name.appspot.com下提供的文件版本 将永远是最新部署, ,解决问题。另外,如果您定期编辑静态文件,则应删除 default_expiration app.yaml文件中的元素,该元素将有助于避免其他服务器的意外缓存。

这对我有用:

首先,我改变了 版本应用程序.yaml.

然后按照以下步骤操作

转到您的控制台 -> 单击您的项目。

在侧面菜单上,单击 计算 -> 版本:

那里将显示所有版本,以及默认版本。我的设置为旧版本。

标记新版本。

对我来说有效。有什么顾虑吗?

从Pyhton标准环境的文档中 static_cache_expiration.

在用给定的到期时间传输文件后,即使用户清除了自己的浏览器缓存,通常也无法将其清除中间缓存。重新部署该应用程序的新版本不会重置任何缓存。因此,如果您打算修改静态文件,则应有一个短(不到一小时)的到期时间。在大多数情况下,默认的10分钟到期时间是合适的。

对于新的人,我想给出更新的答案。我认为在2018 - 19年度,以下信息可能会解决人们遇到的大多数CSS更新问题:

确保您的 app.yaml 有以下内容:

 handlers:
   - url: /static
     static_dir: static
  • gcloud app deploy
  • 冷却10分钟..然后换档您的网站

好的,对于新的人来说,看到这个问题,我尝试了缓存方法,并且似乎已将其修复了,这是我在app.cfg文件上为CSS导入的示例,创建一个变量以将您的acpid保留为App.yaml中的set.yaml归档并将其设置为下面的一个

<link href="{{ url_for('static', filename='file.css') }}?{{config.APP_ID}}" rel="stylesheet"> 

也适用于app.yaml文件添加此配置以在安全的一边

处理者:

  • url: /static static_dir:静态

尝试在浏览器上清除缓存。有完全相同的问题,并通过简单清除缓存来修复它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top