Youtube embeds missing

Depois de muito suor e lágrimas, acho que resolvi.

No entanto, não estou particularmente “orgulhoso” da solução, mas, hey, é o Google; eles não falam nem explicam nada para você, então… conclusões:

  • Primeiro de tudo, uma lição importante: não ative o IPv6 na DigitalOcean se estiver usando o Discourse, pois o intervalo de endereços IPv6 deles é bloqueado pelo YouTube.

  • Após corrigir a mudança do IPv6, devido ao aumento do tráfego — independentemente do provedor de hospedagem (mudei algumas vezes, que jornada!) —, o que aconteceu depois foi que o YouTube passou a bloquear por IP minha instalação do Discourse, devido à quantidade de vídeos do YouTube postados no site e à forma como o Discourse os carrega.

  • Para verificar esse bloqueio, você precisa usar seu servidor como proxy para outro com um navegador ou simplesmente fazer um curl e procurar pela seguinte linha: “Sorry for the interruption. We have been receiving a large volume of requests from your network.” (há este tópico como referência).

  • Graças à ajuda de @riking, @neounix e @Overgrow, executei uma série de comandos (que você pode ler acima) para tentar parar, limitar ou alterar a taxa na qual os embeds do YouTube são renderizados. Para a maioria dos sites, isso seria suficiente, mas tivemos o drama adicional de ter sido migrado depois que tentei alguns provedores, então todas as postagens anteriores precisavam ser renderizadas. Na verdade, limitar a 1 por hora de certa forma resolveu no início. Mas acho que minha comunidade realmente gosta de compartilhar vídeos, porque isso não durou muito.

  • Obviamente, não há nenhum feedback ou ajuda do YouTube aqui, exceto por alguns tópicos no fórum deles com o erro e todos os comentários dizendo “sim, eu também tenho esse problema”, mas sem soluções.

  • Dadas as circunstâncias, lembrando daquela lógica de infomercial de “Tem que haver outra maneira!”, optei por uma abordagem “Rambo”: comprei outro endereço IP. Em seguida, adicionei um cron que alterna o IP de saída a cada hora. Problema resolvido.

É de se esperar que, se o site continuar crescendo e as pessoas continuarem compartilhando esse amor pelo YouTube, eu possa precisar adquirir um terceiro IP. Mas, hey, até que eu descubra uma maneira correta de fazer um “Discourse distribuído” em um K8S ou algo assim, é o melhor que se pode fazer.

Não é a solução mais elegante, eu sei.

Mais uma vez, obrigado por toda a ajuda (e principalmente pela paciência, porque sei que sou muito n00b com toda a combinação Rails/Sidekiq/RubyConsole, mas estou tentando melhorar lendo o código do Discourse).

Obrigado!