Ho recentemente spostato la nostra installazione di Discourse in una sottocartella. Dopo averlo fatto, il pulsante “Mostra post completo” ha smesso di funzionare: si fa clic per espandere il contenuto, ma il post completo non viene caricato.
Non è cambiato nulla nelle mie configurazioni di WP Discourse.
"\"\u003cdiv\u003e\u003cdiv\u003e\u003c/div\u003e\u003c/div\u003e\\n\u003chr\u003e\\n\u003csmall\u003eQuesto è un thread di discussione di supporto per il post originale su \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\""
Il \u003cdiv\u003e\u003cdiv\u003e\u003c/div\u003e\u003c/div\u003edovrebbe essere il contenuto.
Hai anche modificato l’URL del blog per caso?
Anche la visualizzazione onebox mi sembra strana, mi aspetterei che avesse un contenuto troncato memorizzato nella cache invece, quindi presumo che body.present? sia falso nella condizione sopra.
Puoi accedere alla console Rails e verificare se TopicEmbed.where(topic_id: 157441).pick(:embed_url) ti mostra l’URL corretto del contenuto del blog?
Ho dovuto eseguire il debug di questi problemi in questo modo un paio di volte ed è complicato, quindi abbi pazienza.
Esegui lo script seguente e condividi l’output qui
# Sostituisci con l'ID o l'URL del topic che stai debuggando
topic_id = 386983
# 1. Verifica se TopicEmbed esiste e il suo contenuto
te = TopicEmbed.find_by(topic_id: topic_id)
puts "TopicEmbed esiste: #{te.present?}"
puts "URL Embed: #{te&.embed_url}"
puts "Cache del contenuto presente: #{te&.embed_content_cache.present?}"
puts "Lunghezza della cache del contenuto: #{te&.embed_content_cache&.length || 0}"
puts "SHA1 del contenuto: #{te&.content_sha1}"
# 2. Verifica il contenuto memorizzato nella cache effettivo (primi 500 caratteri)
puts "\n--- Anteprima del contenuto memorizzato nella cache ---"
puts te&.embed_content_cache&.truncate(500)
# 3. Prova a recuperare dall'URL remoto
if te&.embed_url.present?
puts "\n--- Tentativo di recupero remoto ---"
begin
response = TopicEmbed.find_remote(te.embed_url)
puts "Recupero remoto riuscito: #{response.present?}"
puts "Corpo remoto presente: #{response&.body.present?}"
puts "Lunghezza del corpo remoto: #{response&.body&.length || 0}"
puts "Titolo remoto: #{response&.title}"
puts "Corpo remoto: #{response&.body&.truncate(500)}"
rescue => e
puts "Recupero remoto FALLITO: #{e.message}"
end
end
# 4. Verifica cosa restituirebbe expanded_for
if te.present?
puts "\n--- Test di expanded_for ---"
post = Post.find(te.post_id)
# Svuota la cache per forzare un nuovo recupero
Discourse.cache.delete("embed-topic:#{topic_id}")
begin
expanded = TopicEmbed.expanded_for(post)
puts "Contenuto espanso presente: #{expanded.present?}"
puts "Lunghezza del contenuto espanso: #{expanded&.length || 0}"
rescue => e
puts "expanded_for FALLITO: #{e.message}"
end
end
# 5. Verifica le impostazioni del sito
puts "\n--- Impostazioni del sito ---"
puts "embed_truncate: #{SiteSetting.embed_truncate}"
puts "allowed_embed_selectors: #{SiteSetting.allowed_embed_selectors}"
puts "blocked_embed_selectors: #{SiteSetting.blocked_embed_selectors}"
Il tuo bypass di Cloudflare ha funzionato? Sembra che il corpo per https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento sia di sole 22 caratteri, senza tag di titolo.
C’è un modo per forzare discourse ad aggiornare tutti gli URL di incorporamento da una categoria, seguendoli fino alla destinazione finale?
Intendo migrare all’incorporamento di Discourse (quell’incorporamento completo che hai provato) quando sarà pronto per la produzione. Ma se gli URL di incorporamento non corrispondono, probabilmente creerebbe nuovi argomenti per ogni post e si perderebbero i commenti…
# Configurazione
CATEGORY_SLUG = 'tb'
category = Category.find_by(slug: CATEGORY_SLUG)
unless category
puts "ERRORE: Categoria '#{CATEGORY_SLUG}' non trovata."
exit
end
puts "Avvio scansione completa degli URL nella categoria '#{category.name}'..."
puts "Questo potrebbe richiedere tempo a seconda del numero di argomenti e della risposta del tuo sito..."
count_updated = 0
count_errors = 0
count_ok = 0
Topic.where(category_id: category.id).find_each do |topic|
current_url = topic.custom_fields["embed_url"]
# Salta se non c'è embed_url
next unless current_url.present?
begin
# Esegue la richiesta GET seguendo i redirect
response = Faraday.get(current_url)
final_url = response.env.url.to_s
# Se la richiesta ha avuto successo (200 OK)
if response.status == 200
# Verifica se l'URL finale è diverso dall'URL salvato nel database
# Il confronto ignora differenze sottili se necessario, ma qui confrontiamo stringa esatta
if final_url != current_url
puts "\n[AGGIORNARE] Argomento ##{topic.id}:"
puts " Da: #{current_url}"
puts " A: #{final_url}"
topic.custom_fields["embed_url"] = final_url
topic.save_custom_fields(true)
count_updated += 1
else
# print "." # Decommenta per vedere il progresso visivo (punti)
count_ok += 1
end
else
puts "\n[ERRORE HTTP #{response.status}] Argomento ##{topic.id} - URL: #{current_url}"
count_errors += 1
end
rescue Faraday::ConnectionFailed, Faraday::TimeoutError => e
puts "\n[FALLIMENTO CONNESSIONE] Argomento ##{topic.id} - URL: #{current_url} - #{e.message}"
count_errors += 1
rescue StandardError => e
puts "\n[ERRORE GENERALE] Argomento ##{topic.id} - #{e.message}"
count_errors += 1
end
# Opzionale: Breve pausa per non sovraccaricare il tuo server WordPress
# sleep 0.1
end
puts "\n\nRiepilogo Finale:"
puts "------------------------------------------------"
puts "Argomenti Verificati (OK): #{count_ok}"
puts "Argomenti Aggiornati: #{count_updated}"
puts "Errori Trovati: #{count_errors}"
puts "------------------------------------------------"
@Thiago_Mobilon Nel corso di questa migrazione hai aggiornato anche il tuo Discourse? È possibile che stiamo vedendo l’applicazione della standardizzazione della normalizzazione di embed_url agli incorporamenti WP Discourse come risultato di un aggiornamento del tuo Discourse, avvenuto contemporaneamente alla migrazione all’installazione nella sottocartella. Quale versione di Discourse stai attualmente utilizzando? (e quale versione stavi utilizzando prima della migrazione, se lo sai?)
Solo una nota a margine, quando eseguo questi due comandi in locale sull’ultima versione di Discourse, ottengo lo stesso risultato, ovvero il corpo HTML dell’articolo
# con barra finale
TopicEmbed.find_remote("https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento/")
# senza barra finale
TopicEmbed.find_remote("https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento")
# produce lo stesso risultato
Hai forse apportato una modifica sul lato Wordpress?
No, questi sono problemi diversi. Lo slash finale è iniziato quando siamo passati alla sottocartella, ma ci sono anche vecchi URL di anni fa che ora hanno uno slug diverso.
Ho dovuto ricostruire l’installazione, quindi sì, penso che questo nuovo standard possa essere la causa.
Il mio suggerimento per risolvere questo problema: Discourse non può seguire almeno uno o due reindirizzamenti per recuperare i dati? Questo risolverebbe il problema dello slash finale e renderebbe anche il sito web a prova di bomba in caso di possibili modifiche agli URL in futuro.
Inoltre, è più sicuro, poiché non ci sarebbe bisogno di eseguire script per aggiornare i vecchi argomenti, il che potrebbe anche causare danni al database.