Recentemente, movi nossa instalação do Discourse para uma subpasta. Depois de fazer isso, o botão “Mostrar postagem completa” parou de funcionar – você clica para expandir o conteúdo, mas ele não carrega a postagem completa.
Nada mudou nas minhas configurações do WP Discourse.
"\"\u003cdiv\u003e\u003cdiv\u003e\u003c/div\u003e\u003c/div\u003e\\n\u003chr\u003e\\n\u003csmall\u003eEste é um tópico de discussão auxiliar para a entrada original em \u003ca href='https://tecnoblog.net/noticias/paramount-oferece-us-108-bilhoes-em-dinheiro-para-tomar-warner-da-netflix'\u003ehttps://tecnoblog.net/noticias/paramount-oferece-us-108-bilhoes-em-dinheiro-para-tomar-warner-da-netflix\u003c/a\u003e\u003c/small\u003e\\n\""
O \u003cdiv\u003e\u003cdiv\u003e\u003c/div\u003e\u003c/div\u003edeveria ser o conteúdo.
Você também alterou a URL do blog por acaso?
A exibição do onebox também me parece estranha, eu esperaria que tivesse um conteúdo truncado em cache em vez disso, então estou assumindo que body.present? é falso na condicional acima.
Você pode entrar no console do Rails e verificar se TopicEmbed.where(topic_id: 157441).pick(:embed_url) mostra a URL correta do conteúdo do blog?
Tive que depurar esses problemas assim algumas vezes e é complicado, então tenha paciência comigo.
Execute o seguinte script e compartilhe a saída aqui
# Substitua pelo ID do tópico ou URL que você está depurando
topic_id = 386983
# 1. Verifica se TopicEmbed existe e seu conteúdo
te = TopicEmbed.find_by(topic_id: topic_id)
puts "TopicEmbed existe: #{te.present?}"
puts "URL do Embed: #{te&.embed_url}"
puts "Cache de conteúdo presente: #{te&.embed_content_cache.present?}"
puts "Comprimento do cache de conteúdo: #{te&.embed_content_cache&.length || 0}"
puts "SHA1 do Conteúdo: #{te&.content_sha1}"
# 2. Verifica o conteúdo em cache real (primeiros 500 caracteres)
puts "\n--- Prévia do conteúdo em cache ---"
puts te&.embed_content_cache&.truncate(500)
# 3. Tenta buscar da URL remota
if te&.embed_url.present?
puts "\n--- Tentando busca remota ---"
begin
response = TopicEmbed.find_remote(te.embed_url)
puts "Busca remota sucesso: #{response.present?}"
puts "Corpo remoto presente: #{response&.body.present?}"
puts "Comprimento do corpo remoto: #{response&.body&.length || 0}"
puts "Título remoto: #{response&.title}"
puts "Corpo remoto: #{response&.body&.truncate(500)}"
rescue => e
puts "Busca remota FALHOU: #{e.message}"
end
end
# 4. Verifica o que expanded_for retornaria
if te.present?
puts "\n--- Testando expanded_for ---"
post = Post.find(te.post_id)
# Limpa o cache para forçar uma nova busca
Discourse.cache.delete("embed-topic:#{topic_id}")
begin
expanded = TopicEmbed.expanded_for(post)
puts "Conteúdo expandido presente: #{expanded.present?}"
puts "Comprimento do conteúdo expandido: #{expanded&.length || 0}"
rescue => e
puts "expanded_for FALHOU: #{e.message}"
end
end
# 5. Verifica as configurações relevantes do site
puts "\n--- Configurações do Site ---"
puts "embed_truncate: #{SiteSetting.embed_truncate}"
puts "allowed_embed_selectors: #{SiteSetting.allowed_embed_selectors}"
puts "blocked_embed_selectors: #{SiteSetting.blocked_embed_selectors}"
Sua solução de contorno (bypass) do Cloudflare funcionou? Parece que o corpo para https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento tem apenas 22 caracteres, sem nenhuma tag de título.
Não estou familiarizado com como o WP-Discourse determina isso, ele deveria estar usando o canônico da postagem, mas não tenho certeza sobre isso. Alguma ideia @angus?
Existe uma maneira de forçar o discourse a atualizar todos os URLs incorporados de uma categoria, seguindo-os até o destino final?
Pretendo migrar para o embed do discourse (aquele embed completo que você tem testado) quando estiver pronto para produção. Mas se os URLs incorporados não corresponderem, então provavelmente criará novos tópicos para cada postagem e perderá os comentários…
@Thiago_Mobilon No curso dessa mudança você também atualizou seu Discourse? É possível que estejamos vendo a aplicação da padronização da normalização do embed_url nos embeds do WP Discourse sendo aplicada aqui como resultado de uma atualização do seu Discourse, que ocorreu ao mesmo tempo da mudança para a instalação em subpasta. Qual versão do Discourse você está executando atualmente? (e qual versão estava executando antes da mudança, se você souber?)
Apenas uma nota lateral de que quando executo estes dois comandos localmente na versão mais recente do Discourse, estou obtendo o mesmo resultado, ou seja, o corpo HTML do artigo
# com barra final
TopicEmbed.find_remote("https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento/")
# sem barra final
TopicEmbed.find_remote("https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento")
# produz o mesmo resultado
Você talvez tenha feito alguma alteração no lado do Wordpress?
Não, estes são problemas diferentes. A barra final começou quando mudamos para a subpasta, mas também há URLs antigas de anos atrás que têm um slug diferente agora.
Eu tive que reconstruir a instalação, então sim, acho que este novo padrão pode ser a causa.
Minha sugestão para corrigir este problema: o Discourse não pode seguir pelo menos um ou dois redirecionamentos para recuperar os dados? Isso resolveria o problema da barra final e também protegeria o site em caso de possíveis mudanças de URL no futuro.
Além disso, é mais seguro, pois não haveria necessidade de executar scripts para atualizar tópicos antigos, o que também poderia causar algum dano no banco de dados.