public/javascript 中缺少 workbox 目录?

你好,

在排查论坛上出现的一些奇怪的故障时,我也检查了应用程序容器内的 Nginx 日志。我有一段时间没检查过了,所以无法确定这些日志是否已经存在了很长时间,但我看到了一些关于丢失 Javascript 文件的错误,而这些文件所在的目录在我当前的安装中根本不存在。

"/var/www/discourse/public/javascripts/workbox/workbox-core.prod.js" 
"/var/www/discourse/public/javascripts/workbox/workbox-cacheable-response.prod.js" 
"/var/www/discourse/public/javascripts/workbox/workbox-routing.prod.js" 
"/var/www/discourse/public/javascripts/workbox/workbox-strategies.prod.js" 
"/var/www/discourse/public/javascripts/workbox/workbox-sw.js"

这些只是其中的一些例子。我在 GitHub 上也找不到它们,想知道是什么导致了这些问题。我希望错误日志不要被刷屏 :slight_smile:

有什么想法吗?

编辑:顺便说一句,我正在运行 3.2.0.beta1 版本,并且在浏览器的控制台中也看到了这些丢失的文件……

Workbox 似乎与缓存有关,我想是这样。

你是什么时候升级的?可能存在一些相关的 bug,但我想我们需要更多信息。

1 个赞

我只在我发帖前一天更新了。

根据我的研究,这似乎与 PWA 有关,需要在 Chrome/Chromium 浏览器中查看。

您还需要什么信息?

9 个月后我们仍然看到这个问题,而且我仍然找不到太多相关信息。不确定是没人查看他们的 nginx 错误日志,还是根本不在乎。

有人知道这是怎么回事吗?这是否可能导致问题?

我正在追踪一些 520/429 问题,这些问题似乎与此没有直接关系,但看到这些错误一遍又一遍地出现仍然让我很烦恼。这会不会是 cloudflare 的问题,仍然尝试从之前的构建加载旧文件?还是浏览器缓存?

鉴于 workbox 在 2 个月前已被弃用,并且这不是一个影响最新网站的问题,我建议更新您的网站。

1 个赞

我使用的是 3.3.0beta2 版本 - 我认为没有可以更新的内容。

1 个赞

你并不孤单,@helmi

我从 3.2.5 迁移到 3.3.0 时也遇到了问题(大量的 502、429 等),不得不降级回 3.2.5

最近我尝试重新升级到 3.3.1,希望情况会有所改善。在某种程度上,情况确实有所改善。只是出现了大量的 502 错误,影响了所有用户。

我决定全力以赴,相信 test-passed,现在使用的是 3.4.0.beta3-dev 2099c33fa7 ),这是 nginx 错误日志偶尔会输出的内容:

2024/10/08 21:44:15 [error] 79#79: *16810 open() “/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js” failed (2: No such file or directory), client: 70.79.108.71, server: _, request: “GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js HTTP/2.0”, host: “netgamers.it”, referrer: “https://netgamers.it/service-worker.js”
2024/10/08 21:45:22 [error] 75#75: *17175 open() “/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js” failed (2: No such file or directory), client: 216.128.26.206, server: _, request: “GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js HTTP/2.0”, host: “netgamers.it”, referrer: “https://netgamers.it/service-worker.js”
2024/10/08 21:47:50 [error] 74#74: *17968 open() “/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js” failed (2: No such file or directory), client: 77.208.167.253, server: _, request: “GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js HTTP/2.0”, host: “netgamers.it”, referrer: “”
2024/10/08 21:47:51 [error] 74#74: *17981 open() “/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js” failed (2: No such file or directory), client: 77.208.167.253, server: _, request: “GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js HTTP/2.0”, host: “netgamers.it”, referrer: “”
2024/10/08 21:47:51 [error] 74#74: *17982 open() “/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js” failed (2: No such file or directory), client: 77.208.167.253, server: _, request: “GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js HTTP/2.0”, host: “netgamers.it”, referrer: “”
2024/10/08 21:47:51 [error] 74#74: *17983 open() “/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js” failed (2: No such file or directory), client: 77.208.167.253, server: _, request: “GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js HTTP/2.0”, host: “netgamers.it”, referrer: “”
2024/10/08 21:47:51 [error] 77#77: *17984 open() “/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js” failed (2: No such file or directory), client: 77.208.167.253, server: _, request: “GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js HTTP/2.0”, host: “netgamers.it”, referrer: “”

尽管虚拟机有 8 核、32GB 内存和 500GB NVMe 硬盘,我仍然不知道导致 502 错误的原因是什么。
我们选择了一个大型虚拟机,因为我们的社区大约有 450 名活跃用户、585k 个主题和 2150 万个帖子。

我们的安装似乎也有这个问题——自从从 3.2.x 更新到 3.3.x 后,我们在发布时会出现 502 错误,最新的帖子没有更新以及类似的问题。

似乎每隔一段时间(几小时?不确定)就会有一个后台脚本出错(?),从而导致这些问题。

编辑:我没看到我们的技术人员已经发帖了 :sweat_smile: 他说的话

我们每隔几个小时就会收到类似的错误浪潮:

2025/05/19 16:48:10 [error] 63#63: *1738520 open() "/var/www/discourse/public/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-core.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-core.prod.js HTTP/1.1", host: "XXXX"
2025/05/19 16:48:10 [error] 63#63: *1738520 open() "/var/www/discourse/public/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-routing.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-routing.prod.js HTTP/1.1", host: "XXXX"
2025/05/19 16:48:10 [error] 63#63: *1738520 open() "/var/www/discourse/public/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-expiration.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-expiration.prod.js HTTP/1.1", host: "XXXX"
2025/05/19 16:48:10 [error] 63#63: *1738520 open() "/var/www/discourse/public/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-sw.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-sw.js HTTP/1.1", host: "XXXX"
2025/05/19 16:48:10 [error] 63#63: *1738520 open() "/var/www/discourse/public/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-cacheable-response.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-cacheable-response.prod.js HTTP/1.1", host: "XXXX"
2025/05/19 16:48:10 [error] 63#63: *1738520 open() "/var/www/discourse/public/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-strategies.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-strategies.prod.js HTTP/1.1", host: "XXXX"

在这种情况下是 public/assets,但我们也看到了 public/javascript 的日志条目:

2025/05/12 18:00:39 [error] 78023#78023: *701261 open() "/var/www/discourse/public/javascripts/workbox/workbox-sw.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/javascripts/workbox/workbox-sw.js HTTP/1.1", host: "XXXX"
2025/05/12 18:00:39 [error] 78023#78023: *701261 open() "/var/www/discourse/public/javascripts/workbox/workbox-routing.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/javascripts/workbox/workbox-routing.prod.js HTTP/1.1", host: "XXXX"
2025/05/12 18:00:39 [error] 78023#78023: *701261 open() "/var/www/discourse/public/javascripts/workbox/workbox-cacheable-response.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/javascripts/workbox/workbox-cacheable-response.prod.js HTTP/1.1", host: "XXXX"
2025/05/12 18:00:39 [error] 78023#78023: *701261 open() "/var/www/discourse/public/javascripts/workbox/workbox-strategies.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/javascripts/workbox/workbox-strategies.prod.js HTTP/1.1", host: "XXXX"
2025/05/12 18:00:39 [error] 78023#78023: *701261 open() "/var/www/discourse/public/javascripts/workbox/workbox-core.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/javascripts/workbox/workbox-core.prod.js HTTP/1.1", host: "XXXX"
2025/05/12 18:00:39 [error] 78023#78023: *701261 open() "/var/www/discourse/public/javascripts/workbox/workbox-expiration.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/javascripts/workbox/workbox-expiration.prod.js HTTP/1.

路径是否随着某个版本更改了?可能是浏览器缓存未正确清除,或者资源未失效。或者,更可能的是,一些愚蠢的机器人一直在扫描它们曾经找到过的资源。我的意思是,在两次这样的日志记录之间,我们有数千名访问者和几十名发帖者,所以这似乎不是一个普遍的问题。

在我们的例子中,访问是通过容器外部的代理和 UNIX 套接字进行的,因此没有客户端 IP 可供检查。对于 77.208.167.253,我找不到任何相关信息,无法确定它是否是机器人。

您运行的是哪个版本?

3.5.0.beta5-dev,不再提供这些文件,也没有最新的前端请求它们。如前所述,要么是过时的缓存/前端(通常在动态HTML文档中不应发生),要么是机器人,客户问题无论如何。

1 个赞