Youtube embeds missing

Olá @Iceman

Você não está errado. Você está apenas tentando resolver um problema, talvez frustrado porque seus embeds do YT não estão funcionando…

Quando você executa isso:

# time rake posts:rebake_match['youtube',string,100]
           116 / 76598 (0.2%)- 

Como o atraso está definido para 100, ele reprocessará apenas uma postagem a cada 100 segundos. Você tem quase 77 mil postagens para reprocessar (usando esse padrão), então isso levaria cerca de 90 dias para concluir. Quando usei 100, foi apenas um exemplo, não uma recomendação; desculpe se isso te confundiu :slight_smile:

Mesmo que você mude para um atraso de 10 segundos, seu reprocessamento levará cerca de 9 dias.

Qual taxa você deseja realmente usar para reprocessar suas “YT cakes”?

Você pode facilmente executar “Reconstruir HTML” como administrador clicando no botão abaixo de cada postagem.

Obrigado, @neounix

Testei em um único post com um link do YT:

root@cont-web-only:/var/www/discourse# rake posts:rebake_match['icemanworkingonthisheadache',string,5]
        1 / 1 (100.0%)
1 post concluído!

Em seguida, verifiquei o post e ele ainda mostra apenas o link, sem o onebox. (Verifiquei sem cache, sem cookies e até em outro PC :P)

Obrigado, @Overgrow.

Também tentei isso antes e depois do comando de rebake (o acima) no mesmo post e em outro, sem sucesso.

Olá @iceman,

Isso é uma grande pista; e agora sabemos que até mesmo rebaking de uma única postagem com a tarefa rake não resolve seu problema (também confirmamos que a reconstrução HTML pela interface não funciona, conforme sugerido por @Overgrow), que é o que você estava tentando nos dizer antes.

Obrigado pelo passo a passo da solução de problemas.

Deixe-me pensar sobre isso por um tempo; e enquanto isso, outros podem ter algumas ideias agora que o problema está ficando mais claro.


Edição:


@Iceman

Publique aqui um dos seus links do YT (que não estão sendo resolvidos) (talvez aquele onde você adicionou o texto ‘icemanworkingonthisheadache’) e vamos confirmar se o onebox funciona aqui (e eu também tentarei em um dos meus sites de staging).

Claro, @neounix

Isso acontece com qualquer vídeo do YouTube, mas, por questão de consistência, aqui estão dois que testei especificamente para isso:


Edição: Sim, eles funcionam aqui.

Como observação, não consigo fazê-los aparecer no painel de pré-visualização na minha instalação.

Mas todas as outras caixas “não YT” estão sendo renderizadas como deveriam no seu site, @Iceman?

Olá @neounix

Sim, todos os outros oneboxes funcionam conforme o esperado: Discourse, Wordpress, SoundCloud, Facebook, Twitter, Vimeo, etc. Apenas o YT aparece como uma URL.

Uma coisa para tentar é fazer login no Google e acessar o site do YouTube enquanto está proxyado pelo seu servidor, e ver se isso gera alguma mensagem de erro ‘interessante’.

Bem, se você não consegue fazer o onebox funcionar no editor para posts recém-adicionados, não há sentido em reprocessar os posts antigos.

Você precisa fazer o onebox funcionar para os novos posts primeiro (pelo menos garantir que ele seja exibido corretamente no painel de pré-visualização).

E, aliás… reconstrução HTML a partir da interface = reprocessar.

Então, após uma semana de penitência, fiz algum progresso, mas, no final, esbarrei em um muro.

  • Todos os detalhes mencionados acima continuam válidos.

  • Depois de ir além e além no depuramento, descobri que o problema era o seguinte: ao criar o novo Droplet, aproveitei a oportunidade para atualizar algumas coisas que não pude fazer na época com o original. Uma delas foi o IPv6. Acontece que os intervalos de IPv6 da Digital Ocean estão majoritariamente banidos pelo Google por algum motivo cósmico. Então, um conselho para o futuro: se você estiver configurando uma instalação do Discourse na DO, não ative o IPv6, pois não será possível removê-lo depois; você terá que trocar o Droplet.

  • Após corrigir isso, tudo funcionou como esperado. No entanto, devido ao crescimento normal (e a algumas táticas recentes da Alphabet), voltei ao zero, pois agora recebo esse erro e não sei de nenhuma maneira de “parar” o Discourse de processar os oneboxes (eu até tentei adicionar o domínio do YT à lista negra, sem sucesso). Isso porque, de acordo com o post que vinculei, “deveria desaparecer após uma hora”, mas não consigo congelar minhas rebakes… ou consigo? Deveria? As outras opções dependem de alterar coisas no lado do servidor, o que seria… adicionar mais IPs? Forçar o “X-Forwarded-For” nas chamadas de Onebox?

  • Além disso, uma pergunta bônus: por que o Discourse “assume a carga” de chamar o YT? Quero dizer, esse erro sugere que é o IP do servidor que está sendo sinalizado por fazer todas as chamadas (sim, é por causa da unfurl do onebox), mas… por que isso não recai sobre o usuário que carrega a página? Por desempenho?

Olá @Iceman

Como uma solução paliativa, testei este CSS (não elegante) para você e parece funcionar para impedir o onebox (de processar); como uma espécie de abordagem de “bater em uma mosca com um martelo”, que você pode ligar e desligar (adicionar e remover) até encontrar algo melhor. Tente e veja:

.onebox-body{
    display:none;
}

Espero que isso ajude.

Nota:

Testei isso em alguns links de onebox e o(s) onebox(es) desapareceram e o link permaneceu; mas não testei em detalhes, desculpe.

Pare o processamento atual. Você sabe o que acionou a recriação que está em execução? É um job em segundo plano? Se for, basta reduzir a configuração rebake old posts count para zero.

Depois disso, você pode usar a recriação de posts selecionados do YouTube (que correspondam a uma expressão regular) com atrasos..

Primeiramente, obrigado a ambos @neounix e @Overgrow

Sobre isso:

Vou testar o mais rápido possível. Enquanto bloquear para que eu possa testar, estou mais do que feliz :smiley:

Sobre a pergunta do @Overgrow:

Recentemente aprendi (graças a vocês) como fazer rebakes personalizados, executar algumas consultas e usar “magia negra”. No entanto, posso perguntar como posso saber/consultar isso:

Ou seja… isso é feito no console Ruby ou matando algo no Sidekiq…?

rebake old posts count controla quantas postagens sinalizadas com as várias tarefas rake são processadas a cada 15 minutos.

Olá @riking,

Obrigado pela sua contribuição. Apenas uma pergunta rápida… como posso alterar essa configuração? No Rails Console?

E aí @Iceman

É uma configuração na interface de administração

Nossa, me sinto tão burra :sweat_smile: Obrigado, @neounix!

Mas não consigo definir como zero. A interface diz que o valor deve estar entre 1 e 2.000.000.000. Então, acho que vou definir como 1 e combiná-lo com sua solução… isso deve me permitir verificar se o banimento será levantado.

(Porque as outras opções são muito mais pesadas: novos IPs, balanceadores de carga ou forçar diretamente o X-Forwarded-For em tudo, e não quero bagunçar o funcionamento do Discourse :sweat:)

Atualizo em breve!

FYI … Se você precisar definir como zero, provavelmente poderá fazê-lo com uma consulta de UPDATE direto no banco de dados (ou no Rails, sobre o qual não posso falar com propriedade).

Bom, sem sorte. Deixei com o valor 1 e usei a gambiarra para não mostrar nada, mas o Ban ainda está ativo 5 horas depois. O pior? Obviamente, não há como entrar em contato com eles, então estou apenas tentando adivinhar formas de resolver. :sweat:

Você precisa ter paciência. Na minha experiência, pode levar de 2 a 3 dias até que o banimento seja levantado. Apenas certifique-se de que não haja novas solicitações para aquele IP.

Você pode verificar se ainda há trabalhos de rebake pendentes. A dica está no código (esta linha seleciona posts que precisam ser rebakeados em segundo plano, limitados pela configuração rebake old posts count):

Você está procurando pelos seguintes posts:

WHERE (((baked_version IS NULL) OR (baked_version < 2)) AND (deleted_at IS NULL))