A nova implementação do service worker do workbox usa UrlHelper.absolute. Como se trata de um ativo compilado, ele armazena a URL completa, contendo o nome de host completo do host principal em um ambiente multissítio.
Sim, importScripts e modulePathPrefix, nas linhas 3 e 6 desse arquivo ERB.
Mas você não me entendeu completamente. Os problemas estão ocorrendo onde não há CDN em um cluster multisite.
Tanto UrlHelper.absolute quanto UrlHelper.local_cdn_url podem lidar com situações com e sem CDN.
absolute:
sem cdn: https://primarysite.ofmultisitecluster.com/javascripts/workbox/workbox-sw.js **ruim - origem remota para todos os sites exceto o primário, expondo o hostname do cluster primário **
com cdn: //cdnurl/javascripts/workbox/workbox-sw.js
local_cdn_url:
sem cdn: /javascripts/workbox/workbox-sw.jsbom - URL relativa
com cdn: //cdnurl/javascripts/workbox/workbox-sw.js
O problema é que essas linhas (3 e 6) não se referem ao arquivo do service worker.
O service worker vem do domínio base (pois não pode ser servido por um CDN), mas ele importa scripts sob demanda em tempo de execução (neste caso, os arquivos da biblioteca workbox), e esses podem ser servidos por um CDN.
Portanto, o problema é que seu cluster multisite não tem um CDN configurado, o que expõe esse bug. O problema fica mascarado quando DISCOURSE_CDN está definido. Só queria saber por que isso não nos afeta.
Você está correto, editei minha segunda postagem para corrigir meus erros.
Não se trata do arquivo do service worker, ele está DENTRO do arquivo do service worker.
Sim, é exatamente nesse momento que o bug está sendo exposto.
o nome da variável aqui current_hostname na linha 288 fortemente sugere algo consciente de multisite
e, por
parece que é. Ponto sem saída até agora…
Procurando em outro lugar, essa rota ganhou um tratamento especial porque os navegadores adoram acessá-la intensamente, e não podemos colocá-la em um CDN e deixar o problema para outra pessoa. Ao fazer isso, tivemos um bug envolvendo um vazamento em multisite, que foi corrigido por @sam há um ano:
Existe a possibilidade de que a maneira como você está servindo esse cluster multisite esteja armazenando em cache essa rota de forma vazada, como estávamos no início de 2018?
Não, o problema é que isso ocorre durante a pré-compilação de assets, o que se torna um problema em ambientes multisite.
Portanto, a solução é não incluir o nome do host nos assets nunca (exceto para um CDN de assets, se ele estiver configurado, já que esse é sempre compartilhado entre os hosts multisite de qualquer forma).
Mas… só para ter certeza… não tenho certeza de como vocês estão lidando com assets em uma CDN em combinação com uma subpasta, mas se você usa Discourse.asset_host, você ainda prefixa todos os caminhos no host de assets com o caminho da subpasta também? Porque é isso que o código está fazendo agora.
Se for isso que vocês estão fazendo, então podem ignorar completamente este parágrafo
Todo esse negócio de subpasta + CDN realmente causou muitos problemas. @featheredtoast fez um trabalho para simplificar isso e passamos bastante tempo garantindo que todo o nosso código de entrega de recursos funcione corretamente nessas combinações estranhas de buckets, subpastas, etc.
Acho que estamos seguros , mas, se necessário, podemos reabrir isso.