hmmm, suspeito que possa ser um de 3 problemas diferentes, mas o mais provável para mim é o redimensionamento em tempo real.
1. Redimensionamento de avatar em tempo real
quando você migrou seus uploads para o R2, ele moveu as imagens originais; no entanto, o Discourse usa vários tamanhos diferentes de avatares (por exemplo, 45px para posts, 120px para o cartão do usuário).
se esses tamanhos otimizados específicos não foram migrados perfeitamente, ou ainda não foram gerados, o Discourse precisa gerá-los de forma síncrona no momento em que o usuário clica neles:
- o Discourse baixa o avatar original do R2 para o servidor local
- redimensiona-o usando o ImageMagick
- faz upload do novo tamanho de volta para o R2
- redireciona o navegador para a nova URL, e esse processo leva de 3 a 4 segundos
para verificar: atualize forçadamente a página — se o avatar demorar 3-4 segundos na primeira vez, mas carregar instantaneamente na segunda vez, é exatamente isso que está acontecendo.
para corrigir: isso se corrigirá naturalmente à medida que os usuários navegarem e os tamanhos forem gerados. Mas você pode corrigi-lo instantaneamente, forçando o servidor a pré-gerar todos os avatares em segundo plano, acessando seu servidor via SSH e executando:
./launcher enter app
rake avatars:refresh
2. O tempo limite de 3 segundos do IPv6
se os avatares estiverem demorando 3-4 segundos todas as vezes, mesmo após várias atualizações, eles provavelmente estão atingindo um tempo limite de rede.
os endpoints da API do Cloudflare R2 são dual-stack, ou seja, usam tanto IPv4 quanto IPv6. Se a sua droplet de servidor tiver um endereço IPv6 atribuído a ela, mas o gateway IPv6 do host não estiver roteado corretamente, a conexão interna do Ruby com o bucket do R2 tentará usar o IPv6 primeiro, ficará pendurada por 3 segundos (este é o tempo limite padrão do TCP do Linux), falhará e então bem-sucedida instantaneamente usando o IPv4.
para verificar: acesse o servidor via SSH e execute:
curl -I -6 https://cloudflare.com
se ele ficar pendurado por alguns segundos e falhar, o IPv6 do servidor está quebrado, fazendo com que cada verificação interna da API S3 sofra um atraso de 3 segundos.
para corrigir: você precisará corrigir o roteamento IPv6 no painel de controle do seu host ou talvez até desativar o IPv6 na droplet completamente.
3. Atrasos do Gravatar
se o seu site estiver configurado para verificar atualizações do Gravatar, ele pode estar fazendo ping nos servidores externos do Gravatar antes de renderizar o avatar. Se o servidor tiver uma conexão de saída lenta (também frequentemente relacionada a DNS ou IPv6), é provável que isso bloqueie a renderização do avatar.
para verificar: execute isso no seu servidor
curl -I -6 https://gravatar.com
se ele ficar pendurado por 3 segundos, o IPv6 está quebrado (veja acima)
correção relacionada ao Gravatar: nas configurações do seu Discourse, vá para baixar gravatars automaticamente, desative-o temporariamente e veja se isso corrige o problema — não acho que este seja o problema, mas se for, você pode deixar a configuração desativada, ou corrigir o roteamento IPv6 como no item 2 acima, ou talvez alterar o resolvedor DNS.