Recientemente moví nuestra instalación de Discourse a una subcarpeta. Después de hacer eso, el botón “Mostrar publicación completa” dejó de funcionar: haces clic para expandir el contenido, pero no carga la publicación completa.
"\"\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\""
El \u003cdiv\u003e\u003cdiv\u003e\u003c/div\u003e\u003c/div\u003edebería ser el contenido.
¿También cambiaste la URL del blog por casualidad?
La visualización de onebox también me parece extraña, esperaría que tuviera un contenido truncado en caché en su lugar, así que supongo que body.present? es falso en la condición anterior.
¿Puedes entrar a la consola de Rails y verificar si TopicEmbed.where(topic_id: 157441).pick(:embed_url) te muestra la URL de contenido del blog correcta?
He tenido que depurar estos problemas de esta manera un par de veces y es complicado, así que ten paciencia.
Ejecuta el siguiente script y comparte la salida aquí
# Reemplaza con el ID o URL del tema que estás depurando
topic_id = 386983
# 1. Comprueba si TopicEmbed existe y su contenido
te = TopicEmbed.find_by(topic_id: topic_id)
puts "TopicEmbed existe: #{te.present?}"
puts "URL del Embed: #{te&.embed_url}"
puts "Caché de contenido presente: #{te&.embed_content_cache.present?}"
puts "Longitud de la caché de contenido: #{te&.embed_content_cache&.length || 0}"
puts "SHA1 del contenido: #{te&.content_sha1}"
# 2. Comprueba el contenido en caché real (primeros 500 caracteres)
puts "\n--- Vista previa del contenido en caché ---"
puts te&.embed_content_cache&.truncate(500)
# 3. Intenta obtener desde la URL remota
if te&.embed_url.present?
puts "\n--- Intentando obtener de forma remota ---"
begin
response = TopicEmbed.find_remote(te.embed_url)
puts "Obtención remota exitosa: #{response.present?}"
puts "Cuerpo remoto presente: #{response&.body.present?}"
puts "Longitud del cuerpo remoto: #{response&.body&.length || 0}"
puts "Título remoto: #{response&.title}"
puts "Cuerpo remoto: #{response&.body&.truncate(500)}"
rescue => e
puts "Obtención remota FALLIDA: #{e.message}"
end
end
# 4. Comprueba lo que devolvería expanded_for
if te.present?
puts "\n--- Probando expanded_for ---"
post = Post.find(te.post_id)
# Limpia la caché para forzar una nueva obtención
Discourse.cache.delete("embed-topic:#{topic_id}")
begin
expanded = TopicEmbed.expanded_for(post)
puts "Contenido expandido presente: #{expanded.present?}"
puts "Longitud del contenido expandido: #{expanded&.length || 0}"
rescue => e
puts "expanded_for FALLIDO: #{e.message}"
end
end
# 5. Comprueba la configuración del sitio
puts "\n--- Configuración del sitio ---"
puts "embed_truncate: #{SiteSetting.embed_truncate}"
puts "allowed_embed_selectors: #{SiteSetting.allowed_embed_selectors}"
puts "blocked_embed_selectors: #{SiteSetting.blocked_embed_selectors}"
discourse(prod)> # Reemplazar con el ID o URL del tema que se está depurando
discourse(prod)> topic_id = 386983
discourse(prod)>
discourse(prod)> # 1. Comprobar si existe TopicEmbed y su contenido
discourse(prod)> te = TopicEmbed.find_by(topic_id: topic_id)
discourse(prod)> puts "TopicEmbed existe: #{te.present?}"
discourse(prod)> puts "URL del Embed: #{te&.embed_url}"
discourse(prod)> puts "Caché de contenido presente: #{te&.embed_content_cache.present?}"
discourse(prod)> puts "Longitud de la caché de contenido: #{te&.embed_content_cache&.length || 0}"
discourse(prod)> puts "SHA1 del contenido: #{te&.content_sha1}"
discourse(prod)>
discourse(prod)> # 2. Comprobar el contenido real en caché (primeros 500 caracteres)
discourse(prod)> puts "\n— Vista previa del contenido en caché —"
discourse(prod)> puts te&.embed_content_cache&.truncate(500)
discourse(prod)>
discourse(prod)> # 3. Intentar obtener de la URL remota
discourse(prod)* if te&.embed_url.present?
discourse(prod)* puts "\n— Intentando obtener de forma remota —"
discourse(prod)* begin
discourse(prod)* response = TopicEmbed.find_remote(te.embed_url)
discourse(prod)* puts "Obtención remota exitosa: #{response.present?}"
discourse(prod)* puts "Cuerpo remoto presente: #{response&.body.present?}"
discourse(prod)* puts "Longitud del cuerpo remoto: #{response&.body&.length || 0}"
discourse(prod)* puts "Título remoto: #{response&.title}"
discourse(prod)* puts "Cuerpo remoto: #{response&.body&.truncate(500)}"
discourse(prod)* rescue => e
discourse(prod)* puts "Obtención remota FALLIDA: #{e.message}"
discourse(prod)* end
discourse(prod)* end
discourse(prod)>
discourse(prod)> # 4. Comprobar lo que devolvería expanded_for
discourse(prod)* if te.present?
discourse(prod)* puts "\n— Probando expanded_for —"
discourse(prod)* post = Post.find(te.post_id)
discourse(prod)*
discourse(prod)* # Limpiar caché para forzar una nueva obtención
discourse(prod)* Discourse.cache.delete("embed-topic:#{topic_id}")
discourse(prod)*
discourse(prod)* begin
discourse(prod)* expanded = TopicEmbed.expanded_for(post)
discourse(prod)* puts "Contenido expandido presente: #{expanded.present?}"
discourse(prod)* puts "Longitud del contenido expandido: #{expanded&.length || 0}"
discourse(prod)* rescue => e
discourse(prod)* puts "expanded_for FALLIDO: #{e.message}"
discourse(prod)* end
discourse(prod)* end
discourse(prod)>
discourse(prod)> # 5. Comprobar la configuración relevante
discourse(prod)> puts "\n— Configuración del sitio —"
discourse(prod)> puts "embed_truncate: #{SiteSetting.embed_truncate}"
discourse(prod)> puts "allowed_embed_selectors: #{SiteSetting.allowed_embed_selectors}"
discourse(prod)> puts "blocked_embed_selectors: #{SiteSetting.blocked_embed_selectors}"
TopicEmbed existe: false
URL del Embed:
Caché de contenido presente: false
Longitud de la caché de contenido: 0
SHA1 del contenido:
— Vista previa del contenido en caché —
— Configuración del sitio —
embed_truncate: true
allowed_embed_selectors:
blocked_embed_selectors:
=> nil
discourse(prod)>
¿Funcionó tu bypass de Cloudflare? Parece que el cuerpo para https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento es de solo 22 caracteres, sin etiqueta de título.
No estoy familiarizado con cómo WP-Discourse determina esto, debería estar usando la canónica de la publicación, pero no estoy seguro de eso. ¿Alguna idea @angus?
¿Hay alguna manera de forzar a Discourse a actualizar todas las URL incrustadas de una categoría, siguiéndolas hasta el destino final?
Tengo la intención de migrar al incrustado de Discourse (ese incrustado completo que has estado probando) cuando esté listo para producción. Pero si las URL incrustadas no coinciden, entonces probablemente crearía nuevos temas para cada publicación y perdería los comentarios…
@Thiago_Mobilon En el curso de este cambio, ¿también actualizaste tu Discourse? Es posible que estemos viendo la aplicación de la estandarización de la normalización de embed_url a los embeds de WP Discourse como resultado de una actualización de tu Discourse, que ocurrió al mismo tiempo que la migración a la instalación en subcarpeta. ¿Qué versión de Discourse estás ejecutando actualmente? (¿y qué versión estabas ejecutando antes de la migración, si lo sabes?)
Solo como nota al margen, cuando ejecuto estos dos comandos localmente en la última versión de Discourse, obtengo el mismo resultado, a saber, el cuerpo HTML del artículo
# con barra inclinada final
TopicEmbed.find_remote("https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento/")
# sin barra inclinada final
TopicEmbed.find_remote("https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento")
# produce el mismo resultado
¿Quizás hiciste algún cambio en el lado de Wordpress?
No, son problemas diferentes. La barra final comenzó cuando nos mudamos a la subcarpeta, pero también hay URLs antiguas de hace años que ahora tienen un slug diferente.
Tuve que reconstruir la instalación, así que sí, creo que este nuevo estándar podría ser la causa.
Mi sugerencia para solucionar este problema: ¿no podría Discourse seguir al menos una o dos redirecciones para recuperar los datos? Eso solucionaría el problema de la barra final y también haría que el sitio web sea más robusto en caso de posibles cambios de URL en el futuro.
Además, es más seguro, ya que no habría necesidad de ejecutar scripts para actualizar temas antiguos, lo que también podría causar algún daño en la base de datos.