Algo que a primera vista en el desarrollo parecía estar bien era la forma en que se migraron todos los mensajes. En el navegador, la mayoría se ven bien, pero al examinarlos de cerca, hay muchas etiquetas HTML heredadas que rompen cosas al cargar imágenes y al importarlas al almacenamiento local, entre otros problemas.
¿Existe una forma inteligente de eliminar el marcado HTML después de la migración de todos los mensajes?
Otra pregunta: también necesito corregir muchas URL, cambiando de http a https.
Gracias por su ayuda. Por cierto, el script improvisado que proporcioné definitivamente debería mejorarse para manejar mejor el procesamiento de los mensajes al formato de mensajes de Discourse (no es mi especialidad)…
Es más fácil solucionar estos problemas en el importador. Si ya has puesto el sitio en producción y esa no es una opción, entonces es más complicado. Solo tienes que escribir código para modificar el texto sin procesar y regenerar las publicaciones. No hay magia, lo siento.
Parece que estás experimentando el problema descrito aquí: Fix broken images for posts created by the WP Discourse and RSS plugins. Mi primera respuesta en ese tema proporciona algunos detalles sobre lo que causa el problema. Este problema afecta a las imágenes en publicaciones que fueron creadas con HTML. Actualizaré el título de ese tema para aclarar que afecta a más que solo las publicaciones creadas con el plugin WP Discourse o un feed RSS.
Idealmente, el analizador de Markdown de Discourse debería poder manejar etiquetas de imagen HTML que están envueltas en otras etiquetas HTML. Sin embargo, creo que es un problema difícil de resolver.
Sí, este es exactamente el fenómeno que tengo con mis imágenes rotas dentro de otras etiquetas HTML.
He comenzado a corregir manualmente, pero es laborioso y se complica por el hecho de que mueve la publicación al tope de la lista de lo más reciente. Eso requiere un reinicio manual del empuje, etc.
Procederé a intentar entender la lógica para eliminar las etiquetas HTML revisando algunas publicaciones realmente problemáticas. Luego, es posible que necesite ayuda para automatizar eso en toda la base de datos; voy a intentar usar Data Explorer para resolver esa parte. ¿Permitiría Data Explorer actuar como un IDE para realizar estas transformaciones de publicaciones?
Hola, he descubierto cómo limpiar manualmente y también cómo arreglar las imágenes rotas. Sin embargo, me gustaría hacerlo de forma automatizada.
Lo que me gustaría hacer es encontrar una manera de eliminar todas las etiquetas HTML como [P], [/P] y [BR/].
He buscado en el foro pero no encuentro nada similar. También revisé los scripts de importación, pero no incluyen un importador de Discourse a Discourse para empezar. Creo que necesito un script que:
acceda a la tabla de publicaciones,
recorra todas las publicaciones,
recorra cada publicación:
–> elimine por completo las etiquetas P,
–> reemplace BR/ con un carácter de nueva línea,
–> haga algo inteligente con las URLs,
–> haga algo inteligente con las imágenes,
y finalmente reconstruya todas las publicaciones, probablemente.
¿Alguien puede orientarme hacia alguna discusión relevante en Discourse, o tiene algún script o fragmento de código que pueda ayudarme a empezar? No soy un desarrollador experimentado, pero puedo modificar cosas que ya funcionan…
Compartiré con la comunidad una vez que haya logrado mi objetivo.
posts = Post.where("raw like '%Sent from%using Tapatalk'")
posts.each do |post|
post.raw.gsub!(/^Sent from my.+?using Tapatalk$/,"")
post.save
post.rebake!
end
No creo que sea necesario hacer algo “inteligente” para las imágenes o las URL a menos que estén rotas de alguna manera.
Necesitarías algo como
post.raw.gsub!(/\/?\[p\]/ig,"\n")
para reemplazar [p] y [/p] con un salto de línea (un salto de línea extra no hará daño, pero puedes eliminar el \n si crees que no lo necesitas), pero no lo he probado, así que probablemente sea incorrecto. Puedes probarlo en algo como https://rubular.com/.
Cuando migramos nuestro foro, tuvimos innumerables problemas con estos códigos BB y etiquetas provenientes de casi dos décadas de publicaciones en el foro.
No utilizamos la función de remap de rake para esto y, en todos los casos, empleamos la técnica que @pfaffman describe en su fragmento de código:
Este fragmento de código, que utiliza gsub(), resume una de las mejores formas de limpiar las publicaciones en bruto después (o incluso mejor, durante) la migración.
Asegúrate de probar tus expresiones REGEX ANTES de implementarlas realmente en la base de datos y ten una copia de seguridad completa antes de realizar operaciones como esta directamente en tu base de datos.
Hola, a continuación está el contenido de mi script/cleanup.rb, que ejecuto usando: RAILS_ENV=development bundle exec ruby script/cleanup.rb
Contenido del archivo:
require_relative '../config/environment'
pm = 0
Post.find_each do |test|
test.raw.gsub!(/<(.|\/.)>/i,"")
test.save
test.rebake!
pm = pm + 1
end
puts "cycled through #{pm} posts"
Intenté ejecutar rake posts:rebake, el cual rebakea 1757 publicaciones. Mi script recorre solo 1712 publicaciones, que corresponden a las importadas con etiquetas HTML, mientras que el resto son nuevas creadas en Discourse.
Creo que estoy cerca, pero al inspeccionar el contenido raw en la interfaz de usuario sigo viendo todas las etiquetas HTML.
Intenté reiniciar el entorno y relanzar unicorn, pero sin éxito. ¡Tan cerca… tan cerca ;o)
Usé tu sugerencia de Rubular y ahora regexr.com lo muestra (ver captura de pantalla a continuación). Por ahora me he centrado en las etiquetas p y r para resolverlas antes de añadir las más complejas.
Cuando agregué una sentencia put a mi pequeño cleanup.rb para imprimir el contenido crudo de la publicación en la CLI, noté que no se imprimían etiquetas HTML en absoluto.
Sin embargo, cuando edito cualquier publicación, sí veo lo siguiente, con las etiquetas HTML en el lado derecho. Esto no parece ser lo normal, porque cuando vuelvo a editar la publicación que estoy editando ahora, no veo las etiquetas HTML…
Ese gsub necesita una g después de /i para coincidir con varias etiquetas. Pero si lo que ves en tu puts es diferente de lo que ves después de que el script se ha ejecutado, entonces no tengo una explicación.
Después de ejecutarlo varias veces, el archivo cleanup.log sigue conteniendo 10 instancias de <p> en aproximadamente 21000 líneas de material de publicación en bruto. Extrañamente, estos nunca se eliminan.
Aún más extraño (para mí) es que cuando inicio unicorn y accedo al sitio en mi máquina local, todavía veo las etiquetas HTML en todas las publicaciones que reviso en la vista en bruto del editor.
Parece que no estoy viendo el mismo entorno, ¿verdad? ¿Acaso d/unicorn consulta un entorno de producción local mientras que mi script aplica cambios en el entorno de desarrollo?
Estoy intentando hacer que esto funcione usando el entorno de desarrollo con la guía de Docker localmente primero, antes de pasar a mi sitio en vivo.
Debe ser algo obvio que estoy pasando por alto por ser nuevo.