Emojis personalizados não usam CDN para ativos armazenados no S3 em algumas páginas

Recentemente, configurei minhas instalações do Discourse para usar um CDN e armazenar uploads e ativos do site em um serviço compatível com S3. Até agora, tudo mais funcionou, mas nossas imagens de emojis personalizados não estão carregando.

Ao examinar o HTML, notei que a URL de um dos emojis é: //thrivecommunityforum.s3.eu-central-1.wasabisys.com/original/2X/6/6b7f95a2cfc7810d26c7e170ebf926ba8634261b.png
(Isso não carrega porque configurei uma substituição para impedir o acesso público ao bucket, após ver no gerenciador de arquivos um aviso de que a gravação pública estava habilitada para os arquivos.)

Enquanto todas as outras imagens carregadas e ativos do site referenciam corretamente o CDN que configurei: https://thrivecommunity-uploads.b-cdn.net/original/2X/6/62f6697da0e3cd71a7d4f1eed518641f8428150b.jpeg

As URLs de emojis nativos se parecem com isto: https://thrivecommunity-cdn.b-cdn.net/images/emoji/twitter/thinking.png?v=9

Portanto, minha conclusão é que pode haver um bug no tratamento de emojis personalizados ao gerar os links de imagem, que ignora o uso do CDN configurado para ficar na frente dos arquivos armazenados no S3.

Tentei encontrar tópicos relevantes, mas só encontrei este: Custom Emoji does not use Amazon S3, que parece estar desatualizado, já que o Discourse está tentando usar o S3 para servir emojis personalizados no meu site.

Emoji personalizado para teste

:facepalm:

:mdr:

Emoji não personalizado

:slightly_smiling_face:

Portanto, os emojis padrão usam um CDN, enquanto os personalizados usam outro, mas ambos são cobertos pelo CDN se você fizer uma configuração adequada seguindo Usando Armazenamento de Objetos para Uploads (Clones S3) à risca.

Não é um bug, este é o comportamento esperado, pois os emojis padrão estão armazenados dentro do código do aplicativo e os personalizados são apenas um upload normal do site.

Eu dei uma olhada naquele tópico e, até onde sei, minha configuração deve estar correta:

  DISCOURSE_CDN_URL: https://thrivecommunity-cdn.b-cdn.net
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: eu-central-1
  DISCOURSE_S3_ENDPOINT: https://s3.eu-central-1.wasabisys.com
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  DISCOURSE_S3_ACCESS_KEY_ID: aaaa
  DISCOURSE_S3_SECRET_ACCESS_KEY: aaaa
  DISCOURSE_S3_CDN_URL: https://thrivecommunity-uploads.b-cdn.net
  DISCOURSE_S3_BUCKET: thrivecommunityforum
  DISCOURSE_S3_BACKUP_BUCKET: thrivecommunityforum-backup
  DISCOURSE_BACKUP_LOCATION: s3

Tive um problema semelhante (posts contendo emojis personalizados não eram marcados para rebake durante a migração para o S3 se não houvesse outros uploads no post bruto e, portanto, o link cozido não apontava para a CDN).

Corrigi isso excluindo e reenviando apenas um dos emojis personalizados, o que acionou automaticamente uma tarefa que reconstroiu todos os posts com emojis personalizados (mas tenho certeza de que também existe uma tarefa rake que pode ser usada para rebake diretamente posts com emojis personalizados).

Vejo o problema em admin/customize/emojis, bem como na pré-visualização do editor de postagens. Além disso, as reações de retórica em postagens feitas na última hora estão falhando.
Portanto, isso não afeta apenas postagens antigas que usam emojis, mas também postagens novas e partes da interface (o seletor de reações de retórica também usa a URL errada, assim como a área de gerenciamento de emojis do administrador).

Isso está relacionado a S3 CDN URL ignored when uploading into posts. Adicionado ao tópico original.

Por favor, relate no tópico do plugin, pois é de terceiros.

Isso é legítimo, mas tem baixo impacto, pois é uma página exclusiva para administradores.

Então é isso mesmo. Se eu realmente publicar, o emoji é exibido corretamente.

Se a correção para o plugin Retort for semelhante à forma como a área administrativa seria corrigida, talvez eu possa tentar corrigir o plugin, já que os emojis de reação personalizados são bastante utilizados na minha instância do Discourse.

Tentei corrigir isso sozinho após uma rápida olhada.
Parece que o problema é que o método JavaScript do Discourse buildEmojiUrl recebe a URL de armazenamento em vez da URL da CDN para o emoji personalizado. O que parece ser a mesma coisa que o plugin retort também usa.
Então, ao corrigir isso, provavelmente resolveria todos os problemas, certo?

Depois dessa rápida olhada, encontrei um local que parece construir as URLs para os emojis personalizados e mudei isso para:

Testei com o rails console e isso parece corrigir as URLs no meu site de produção. Então, tentei implantar essa alteração lá, mas não funcionou.
Depois de não funcionar, também tentei mudar o EMOJI_VERSION para 10 para tentar forçar alguma atualização, mas isso também não funcionou. Quando faço launcher enter e git log, vejo meu commit lá. Segui a abordagem aqui: