Rails 旧资产的后端 500 错误

Rails backend 500 errors for old assets

当我用新资产版本在我的服务器上部署新版本时,我经常看到亚马逊报告大约 500 个错误。在日志中,我看到那些请求似乎试图获取旧版本的资产(旧资产摘要)

F, [2016-09-12T22:47:46.657377 #6663] FATAL -- : [1a552b90-e121-4817-8d22-28d02677c12a] ActionController::RoutingError (No route matches [GET] "/assets/application-3d5482837991d4fb95e72bd2c8ea9c08b07b349115db14016c71d86b5e295fc2.js"):

当我看到这样的日志时,我真的很不安,因为我不太确定客户端发生了什么:浏览器是根本不呈现任何 JS/CSS,还是轮询服务器再次获取新资产??由于我从未见过 html-only 页面在服务器更新后呈现,我假设一切都很好,但真的吗?。

我使用了很多开发人员工具,这些工具都在摆弄缓存选项,我想也许有些用户在没有这些东西的情况下浏览时确实会遇到错误页面...

Exception Notifier 不会为这些错误抛出任何 email/notification 但我收到 Amazon 消息警报负载均衡器 500 错误。 AWS/ELB - MetricName: HTTPCode_Backend_5XX - Dimensions: [LoadBalancerName = xxx]

判决?

您的网页上是否不再有这些资产?如果是这样 - 这有时会发生,例如 google 缓存了一个页面的旧副本,然后有人(有时是 google 爬虫)试图查看它并从中获取资产......这不再存在。

通常您会因缺少资产而收到 404,但在这种情况下 - Rails 已经更改了您获取这些资产的路径,因此它会抛出如图所示的路由错误.

同样 - 如果您部署网站的新版本并且您的资产已更新(例如,您向 application.js 添加了一些内容)...资产的魔术 ID 发生变化...(大长号)导致旧版本不再可用。客户现在需要刷新他们的页面以获得 application-<longmagicnumber>.js

的新 URL