Youtube embeds missing

Olá @Iceman,

Sim, acabei de pesquisar no banco de dados para você e não consegui encontrar nenhuma tabela ou campo onde essa configuração seja armazenada (não estava na tabela site_settings)

Quanto ao seu comentário:

… e o banimento ainda está ativo 5 horas depois

Não tenho nenhum conhecimento especializado sobre como o Google gerencia esses “banimentos”, mas suspeito que, após os algoritmos deles ativarem um banimento, pode levar muito mais tempo para o Google “desbanir” (dias ou até semanas).

Mas, novamente, não tenho nenhum conhecimento prático sobre como esse processo de banimento “funciona” ou mesmo qual é o “nome oficial desse processo de banimento” do Google.

Você tem?

Existe uma página de suporte do Google onde eles discutem isso? Qual é o nome exato desse processo de banimento ao qual você está se referindo?

Definitivamente, não há uma página de suporte onde o Google explique exatamente como funciona seu bloqueio de prevenção a ataques de negação de serviço (DoS) ou qualquer sistema relacionado.

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!

Brilhante!

Essa é uma solução criativa, eficaz e de “pensamento fora da caixa”.

Parabéns por resolver seu quebra-cabeça com estilo e maestria!

Seguindo as recomendações, configurei um CDN CloudFront para nosso bucket AWS S3 no Discourse há alguns dias.

Adicionei a URL do CDN S3 no nosso painel de controle e, em seguida, executei o comando de rebake em mais de 200.000 posts.

Na época, não dei muita importância; o sistema ficou ativo e trabalhou sua magia nas próximas 12 horas ou mais.

Temos muitos, muitos vídeos incorporados no nosso Discourse. Somos uma comunidade de drones/UAVs, e as pessoas postam e compartilham fotos e vídeos o dia todo. Existem dezenas de milhares de vídeos do YouTube nos nossos posts.

Olhando para trás…? Após adicionar a URL do CDN, provavelmente eu só precisaria ter feito o rebake nos posts que correspondessem ao padrão *.jpg ou algo similar :man_facepalming:t2: :cry:

De qualquer forma, o que aconteceu?

O YouTube bloqueou o endereço IP do nosso servidor :pensive:

Agora não conseguimos mais oneboxar links do YouTube; nossa comunidade se depara com:

429 Too Many Requests

:pensive:

(Um simples curl ou wget no próprio servidor também retorna o mesmo erro)

Obviamente, fomos bloqueados em algum momento durante o rebake, pois metade dos posts existentes que tinham vídeos funcionando agora não têm mais :sob:

Estou assumindo que esse bloqueio é permanente, mas, como você sabe, é impossível encontrar alguém no YouTube para entrar em contato e implorar por perdão.

Na remota possibilidade de ser permanente, uma pergunta para @Iceman: você poderia compartilhar os detalhes de como obteve um segundo endereço IP na DigitalOcean e as alterações que fez para rotear o tráfego de saída por esse IP, mantendo o tráfego de entrada no IP existente?

E uma pergunta para todos: alguém sabe se esse bloqueio é provavelmente temporário? :crossed_fingers:t2 E/ou há algo que eu possa fazer para corrigir meus posts do YouTube, que agora estão muito quebrados?

Para uma comunidade fortemente focada em mídia, isso é bastante desastroso para nós.

É improvável que seja permanente; provavelmente desaparecerá com o tempo.

Se alguém estiver procurando pela mesma alteração, você pode usar um Remap em vez de refazer o bake, o que é quase instantâneo e não faz requisições para lugar nenhum.

Desculpe a resposta tardia.

Não posso te ajudar com a Digital Ocean; deixei de usá-la quando o suporte a IPv6 deles era insuficiente.

Continuo adicionando mais e mais IPs ao “switch” que faz solicitações de saída ao YouTube, alternando entre eles para evitar ser banido. Mas, eventualmente, eles acabam sendo banidos e isso cria um impasse. Se você estiver “banido” e esse IP continuar fazendo solicitações, ele continuará sendo banido. É necessário ficar entre 1 e 8 horas sem fazer solicitações para que o YouTube “desbane” você. Quanto mais usuários você tiver e quanto mais vídeos do YouTube eles postarem, pior fica.

Graças à última atualização dos oneboxes, ficou mais fácil identificar o problema (pois é possível ver o erro 429 diretamente no Discourse, em vez de ter que procurá-lo porque os vídeos não são exibidos corretamente). No entanto, com base no meu entendimento limitado, me pergunto se há uma maneira melhor de lidar com a incorporação de vídeos do YouTube. Porque, quando o vídeo é reproduzido, a solicitação vem do IP do cliente (acho eu), mas quando o vídeo é exibido, é o seu site que faz a solicitação por vídeo.

Obrigado @Iceman :+1:t2:

Isso é realmente útil de saber.

Instalei o plugin Onebox Assistant na sexta-feira e roteei todos os oneboxes pelo proxy do embed.rocks.

Hoje, no console do servidor, tentei um wget aleatório de um vídeo do YouTube.

Como esperado, fomos desbloqueados!

O Onebox Assistant foi desativado novamente esta tarde e estamos fazendo as requisições diretamente, sem problemas até agora.

Se eu não tivesse feito isso, acho que você tem razão e nunca teríamos sido desbloqueados, pois estaríamos acessando o YouTube a cada hora ou mais ou menos, já que as pessoas postam vídeos novos constantemente :grimacing:

Obrigado novamente :smiley:

Obrigado pelas informações adicionais, @Iceman e @Richie. Isso tem surgido com bastante frequência ultimamente, então qualquer informação extra sobre como o YouTube aplica a limitação de taxa é super útil.

Também queremos tranquilizar as pessoas de que essas “proibições” são automáticas em ambas as direções: se você for paciente e reduzir o número de solicitações ao YouTube que seu site faz, deverá ser removido da lista dos travessos do Papai Noel em alguns dias. :santa_claus::page_with_curl:

Usei uma variação disso para processar suavemente muitos posts. Uma sugestão de baixo risco e grande economia de tempo, obrigado @riking!

FYI, usei isso para acompanhar o progresso:

Post.where(baked_version: nil).count