Youtube embeds missing

I have a client for whom embedded youtube videos are missing. They appear in composer’s preview, but when the messages are saved, they disappear. They are working fine in try.discourse.org. I tried whitelisting youtu.be and changing the URL to a youtube.com url too. Neither solved the problem.

The site is running v1.6.0.beta11 +141

Have you tried reaching YouTube from your client’s server?

It seems that the problem was that recent Discourse updates have caused my DOI resolver plugin to muck things up. (I disabled a couple other things too, but it was definitely some plugin. . . )

Alguém está tendo problemas ao reprocessar posts, recebendo 429 Too Many Requests para youtube.com?

[1] pry(main)> posts = Post.where("raw like '%youtube%'").count
=> 5237

:thinking:

Eu também encontrei isso. É um banimento temporário de IP (creio que de 1 hora), e durante esse período todos os oneboxes do YouTube falham para as postagens rebaked.

Talvez devesse ser implementado algum mecanismo para impedir mais de x solicitações ao YouTube por hora durante o rebaking?

Recentemente, após uma série de alterações e atualizações na minha instalação do Discourse, apenas duas coisas estão faltando. Uma é não conseguir reconstruir o contêiner de dados, e estou tentando descobrir como resolver, mas a outra é que todos os oneboxes funcionam, exceto com URLs do YouTube.

Dentro do servidor e do contêiner, consigo fazer CURL para o YouTube. Como posso ter certeza de que se trata de um banimento temporário de IP?

Edição: Posso confirmar que nem o Rebuild (App) nem o Rebake afetam esse problema.

Edição 2: Ao pesquisar, vi que @jomaxro comentou aqui que coisas como o CloudFlare podem afetar os Oneboxes… um CDN pode afetar apenas um Onebox? Tentei colocá-lo no Modo de Desenvolvimento, mas não houve mudanças.

Edição 3: Tentei remover todos os plugins. Nada mudou. (Além disso, não consigo rebakear, pois parece que os processos estão se interrompendo mutuamente).

Edição 4: Tentei o comando de @Overgrow e sim, de fato tenho um problema

[1] pry(main)> posts = Post.where("raw like '%youtube%'").count
=> 72674

Estou tendo dificuldade para executar os comandos de rebake porque meu contêiner está me retornando:

PG::UnableToSend: no connection to the server

PG::ConnectionBad: PQconsumeInput() SSL SYSCALL error: EOF detected

Preciso parar algo?

Uma abordagem poderia ser simplesmente reassar usando uma correspondência de padrão e definir um atraso.

Algo como:

rake posts:rebake_match["%youtube%",regex,10]

?

Meu principal problema é não conseguir executar o comando :sweat:

Isso pode funcionar para recalcular lentamente: Post.where("raw like '%youtube%'").where("cooked NOT LIKE '%lazyYT%'").update_all(baked_version: nil)

Primeiro de tudo, muito obrigado por dedicar seu tempo para me ajudar, @riking.

Executei esse comando e obtive o que presumo ser o número de postagens faltantes: 22462. Com base na última parte do comando, é seguro assumir que ele está sendo executado em segundo plano?

Sim, há uma tarefa que roda a cada 15 minutos e reprocessa as postagens definidas em SiteSetting.rebake_old_posts_count.

Só uma pergunta: o número não diminui, não importa quanto tempo passe. Existe alguma forma de eu acompanhar ou forçar esse trabalho?

Hmm, é possível que eu tenha errado :thinking: Qual é o resultado disso? Post.where("raw like '%youtube%'").where("cooked LIKE '%lazyYT%'").count

Status atual:

Comando antigo:

[2] pry(main)> Post.where("raw like '%youtube%'").where("cooked NOT LIKE '%lazyYT%'").update_all(baked_version: nil)
=> 23257

Novo Comando:

[1] pry(main)> Post.where("raw like '%youtube%'").where("cooked LIKE '%lazyYT%'").count
=> 49458

Edição: Após algum tempo, posso confirmar que o segundo permanece estático (mesmo valor), enquanto o primeiro continua aumentando.

Não é necessário usar regex para encontrar uma string em um post. Uma simples busca por string funcionará bem para youtube (por exemplo). Neste exemplo, cada post que contenha a string youtube será reprocessado, um a cada 100 segundos (muito lento…)

Screen Shot 2020-05-26 at 11.23.06 AM

Cerca de 100 segundos se passaram:

Screen Shot 2020-05-26 at 11.25.35 AM

Vou deixar isso rodar, imaginando que em 76.200 segundos, mais ou menos, essa tarefa rake estará concluída :slight_smile:

Acho que deveria ter configurado este exemplo com um atraso de 10 segundos :slight_smile:

Muito obrigado @neounix

Tentei, mas, infelizmente, sem sucesso.

Estou começando a acreditar que talvez haja algo relacionado à rede?

Desculpe, @iceman,

Como sou um cara meio nerd, não entendi o que significa “sem sucesso” :slight_smile: (não há informações técnicas suficientes).

Você quer dizer que, ao executar o comando rake, você recebe um erro do Rails?

Se for esse o caso, por favor, poste o erro completo do Rails.

Ou será que a tarefa do Rails foi executada com sucesso? Se sim, quantas postagens foram reprocessadas de acordo com a tarefa rake?

Obrigado.

Por exemplo, minha pequena tarefa de reprocessamento (com um atraso de 100 segundos, muito lento) está rodando há horas para este tópico:

Screen Shot 2020-05-26 at 5.09.07 PM

Atualmente: 209 de 762 no total…

Quais são os números da sua tarefa de reprocessamento?

Peço desculpas pela minha informação incompleta!

Queria dizer que executei em uma pequena amostra e depois executei novamente, mas o número não mudou.

Ou seja: executei o comando e tinha 76.000 posts, processou 200, parou, executei outro e o novo número foi 76.200 (sim, talvez meus usuários tenham adicionado 400 posts com YouTube… mas… não sei).

Agora estou executando novamente só para ver como fica, mas vai levar alguns dias :stuck_out_tongue: (76.500 acessos…)

Como ninguém mais tem esse problema, estou tentando pensar nas minhas variáveis e basicamente:

  • Mudei de máquina (então poderia ser limitação de taxa do YouTube?)
  • Restaurei um backup do Discourse em uma nova instalação (isso não deveria estar relacionado, mas neste ponto estou apostando em tudo que se move)
  • Instalação em dois containers (Pensei que tivesse um problema com a reconstrução dos dados, mas graças a esta informação do @Falco, agora sei que é “normal”.)
  • Coloquei o CloudFlare em cima seguindo os tutoriais de CDN que estão aqui.

Desculpe por ter uma cabeça grossa :slight_smile: você quer dizer que está executando essa tarefa rake?

rake posts:rebake_match['youtube',string,10]

É importante postar exatamente o que você está digitando e vendo.

Qual é a tarefa rake exata e quais parâmetros você está usando?

Ao executar essa tarefa rake, quais são as primeiras linhas de saída quando a tarefa começa a assar novamente?

Por favor, poste detalhes, capturas de tela, cópias e colagens do seu(s) terminal(is), etc.

Desculpe @neounix, você tem 100% de razão.

Deixe-me reformular:

Executei este comando:

root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string]
        76597 / 76594 (100.0%)-
    76597 posts concluídos!

Depois pensei: “Bem, óbvio, você precisa adicionar o temporizador, senão não conseguimos testar a ‘Teoria do Limite de Taxa’”, então tentei o que você postou:

root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string,100]
            216 / 76594 (0.2%)-

E parei só para verificar se as coisas estavam mudando. Aparentemente nada, então pensei: “ok, deixe-me rodar isso novamente e ver como vai”:

root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string,100]
           116 / 76598 (0.2%)-

Isso está rodando agora mesmo. Então meu argumento era que o número total de posts não diminuiu com o outro rebake. (Eu poderia estar, e possivelmente estou, errado com essa lógica).