Rebake com comando rails ou tarefa rake não funciona, mas reconstruir HTML sim. Por quê?

Então, é aqui que estou:

Depois de tentar executar um post.rebake!(invalidate_broken_images: true) em todos os meus 40.000 posts que contêm a string [img], funcionou para muitas imagens… Mas longe de todas, apesar de estarem hospedadas no mesmo serviço de hospedagem de imagens externo.
Por exemplo, tenho milhares de links “funcionais” do casimages (que apontam para imagens válidas e exibem imagens na pré-visualização do composer na edição), quebrados na versão “cozida” dos posts, que foram devidamente exibidos e carregados no servidor graças ao meu script, mas também tenho muitos outros onde simplesmente não funcionou, e não sei por quê.

Post.where('raw LIKE ?', '%[img]%').find_each do |p|
    p.rebake!(invalidate_broken_images: true)
end

Também tenho links de imagens de outros hospedadores de imagens que foram carregados, e alguns nos quais não funcionou.
Falhei em ver qualquer diferença entre esses posts e links de imagens. Todos eles tinham imagens funcionando, e o fato de usarem o mesmo serviço de hospedagem de imagens me deixou intrigado.
Tentei a operação várias vezes e os resultados foram inconsistentes, independentemente dos serviços de hospedagem externos… Algumas imagens foram carregadas, outras não. Parecia aleatório.
Isso me lembra um pouco o problema que o @Amethi encontrou: Some linked images not displaying/show as broken - #8 by Amethi onde funcionou apenas em algumas imagens sem nenhuma explicação.


:information_source: Falarei apenas sobre casimages aqui, embora meu fórum importado usasse vários outros hospedadores de imagens.

Então, pensei que talvez o casimages estivesse temporariamente bloqueando meu IP se eu tentasse recuperar muitas imagens de seus servidores. Isso poderia explicar tanto o fato de não ter funcionado para todas as imagens quanto a aleatoriedade do sucesso do carregamento das imagens do meu servidor.
Houve até casos em que a opção Rebuild HTML funcionou - inicialmente apenas -, as imagens foram então exibidas em vez de mostrar um ícone de imagem quebrada, embora ainda estivessem hospedadas em seu serviço de hospedagem externo, mas quando a tarefa Sidekiq “pull external image” foi acionada, ela quebrou as imagens.
O mesmo acontece ao usar scripts rails com rebake!(invalidate_broken_images: true)
:weary:

Então, estou atualmente tentando uma abordagem mais lenta, onde espero 5 segundos entre cada um dos meus comandos rails rebake!:

total = Post.where('lower(raw) LIKE ?', '%[img]https:%').count
i = 0
Post.where('raw LIKE ?', '%[img]https:%').find_each do |p|
    p.rebake!(invalidate_broken_images: true)
    print "#{i}/#{total}"
    print "\r"
    i +=1
    sleep(5)
end

Verificarei em ~60 horas se melhorou…

Gostaria de entender os fundamentos do meu problema aqui e por que um rebake “normal” não consegue carregar uma imagem no servidor (se eu não for temporariamente bloqueado pelo casimages).

Note que desta vez, o certificado do servidor do casimages parece OK :smile:

Também não entendo o que invalidate_broken_images realmente faz. Não sou muito familiarizado com o código do Discourse.
Olhei o código para ver a ocorrência de invalidate_broken_images e vi estes arquivos:

Por que ele procura especificamente pela string <img>? Meus posts são de um phpBB importado e a versão raw contém apenas o bbCode [img], não tags <img>; então como isso teria um efeito (e teve, veja minha mensagem anterior) nos meus posts? :thinking:

Também não entendo realmente a diferença entre esses dois métodos (?):

Parece dizer que rebake define os argumentos padrão como false, e que rebake! define o argumento padrão como true.
Como esses dois estão relacionados (estou ciente do propósito do caractere ! em ruby, aliás), e por que eles estão em arquivos diferentes?

Meu objetivo é apenas entender por que minhas imagens externas às vezes são carregadas, às vezes não, e se posso encontrar uma maneira confiável de carregá-las corretamente e automaticamente, mesmo que isso implique carregar uma imagem a cada hora. :sweat_smile:
Estou nisso há quase duas semanas e isso está me deixando (e as pessoas para quem migrei o servidor) louco. :woozy_face:

Além disso, não há nada no log do Discourse, exceto múltiplos Sidekiq is consuming too much memory (using: 592.25M). Note que estou trabalhando no Ubuntu via WSL no Windows 10, mas pretendo usar uma solução funcional (se eu encontrar uma…) em nosso VPS.

1 curtida