Eso no permitirá que Discourse descargue esas imágenes para que las tengas cuando ya no estén disponibles en Photobucket, pero sí las mostrará.
Entonces, querrías ir a Rails, obtener todas las publicaciones que tengan ^https://hosting.photobucket.com y hacer un gsub para reemplazar esas URL desnudas con .
Espera. Cuando escribí esto por primera vez, la URL superior no se renderizó, ¡pero luego parece que Discourse logró descargarla! (¡Y también funcionó en mi servidor de prueba!)
¿Quizás solo necesitas volver a hornear las publicaciones?
Necesito ejecutar un comando de rails para encontrar todas esas publicaciones y luego usar gsub para reemplazar los [URL…][/URL] con solo la url real para que se renderice en un one-box.
DiscourseHelper:
Búsqueda
Buscando: ¿Cómo uso un comando de Rails o código de consola para encontrar todas las publicaciones que contienen un formato de cadena específico como las etiquetas [URL] y luego reemplazo esas etiquetas con solo la URL contenida en Discourse?
Para encontrar todas las instancias de [URL]...[/URL] y reemplazarlas con solo la URL contenida en tus publicaciones de Discourse, puedes lograr esto usando Rails en la consola de Discourse. Aquí te explico cómo hacerlo:
Pasos:
Accede a la Consola de Rails:
Necesitas acceso SSH a tu servidor. Ejecuta el siguiente comando para acceder a la consola de Rails de Discourse:
cd /var/discourse
./launcher enter app
rails c
Ejecuta un Comando de Buscar y Reemplazar:
Usa el siguiente fragmento de código para localizar publicaciones que contengan [URL]...[/URL] y reemplazarlas.
Post.where("cooked LIKE ?", "%[URL=%[/URL]%").find_each do |post|
updated_cooked = post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
if updated_cooked != post.cooked
post.update!(cooked: updated_cooked)
PostRevisor.new(post, Discourse.system_user).revise!(
post.user,
{ cooked: updated_cooked },
revised_at: Time.now
)
puts "Publicación actualizada id: #{post.id}"
end
end
Prueba el Script:
Antes de reemplazar el contenido en masa, ejecuta la lógica gsub en una sola publicación para asegurarte de que se comporta como esperas.
test_post = Post.first # Reemplaza con un ID para una mejor prueba
puts test_post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
Ejecuta el Script y Monitorea:
Ejecuta el script completo, monitorea la salida y corrige cualquier error si es necesario.
Notas:
Este script utiliza Regex (\[URL=.*?\](.*?)\[\/URL\]) para encontrar y reemplazar el patrón especificado. Asegúrate de que el patrón coincida exactamente con tus necesidades.
Utiliza PostRevisor para asegurar que los cambios se registren en el historial de edición de la publicación.
Asegúrate de probar a fondo y hacer una copia de seguridad de tu base de datos antes de ejecutar cualquier cambio masivo.
Para obtener orientación adicional, consulta la documentación relacionada en meta.discourse.org. Si encuentras problemas, ¡no dudes en compartir los detalles aquí!
pfaffman:
Necesita reemplazar eso en raw, no en cooked.
DiscourseHelper:
¡Gracias por la aclaración! Dado que los cambios deben realizarse en el campo raw (contenido original de la publicación), podemos modificar el script para que funcione con el campo raw en su lugar. Aquí te explico cómo puedes lograrlo:
Comando de Rails Actualizado para el Campo raw
Modifica y Ejecuta el Script:
A continuación se muestra el script actualizado para procesar y reemplazar las etiquetas [URL]...[/URL] en el campo raw de las publicaciones:
# Encuentra todas las publicaciones donde raw incluye la etiqueta [URL]
Post.where("raw LIKE ?", "%[URL=%[/URL]%").find_each do |post|
updated_raw = post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
if updated_raw != post.raw
# Actualiza el contenido raw
post.update!(raw: updated_raw, cooked: nil)
# Dispara el rebake para regenerar el contenido cocido
post.rebake!
puts "Publicación actualizada id: #{post.id}"
end
end
Explicación de los Cambios:
raw en lugar de cooked: El campo raw contiene el contenido original de la publicación, por lo que la operación gsub se aplica al texto raw.
Restablecer cooked: Establecer cooked a nil asegura que la publicación se procesará (rebake) correctamente.
rebake!: Esto activa el proceso de rebake, que regenera la versión cooked (renderizada en HTML) de la publicación a partir del contenido raw actualizado.
Prueba el Gsub para Contenido Raw:
Prueba la sustitución de la expresión regular en una sola publicación para asegurarte de que se comporta correctamente:
test_post = Post.first # Reemplaza con un ID de publicación apropiado para la prueba
puts test_post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
Ejecuta la Actualización Masiva:
Una vez que confirmes que funciona según lo previsto, puedes ejecutar el script para procesar todas las publicaciones que contengan las etiquetas [URL].
Monitorea y Verifica:
Monitorea la salida del script. Por cada publicación actualizada, se imprimirá su id en la consola. Después de completar, revisa algunas publicaciones en el sitio para asegurarte de que los cambios aparezcan correctamente.
Recordatorio de Copia de Seguridad:
Antes de ejecutar el script, asegúrate de tener una copia de seguridad completa de la base de datos, especialmente cuando trabajes con actualizaciones masivas.
Si tienes preguntas adicionales o encuentras problemas, ¡no dudes en preguntar!
Y me gusta que use PostRevisor para que si algo sale mal, tengas un registro de la edición.
Definitivamente querrás probarlo en algunas publicaciones antes de lanzarlo, y también ver cuántas publicaciones va a arreglar y quién recibirá notificaciones sobre todas ellas (creo que hay algo como bypass_bump o similar que omite las notificaciones).