Tareas Rake: remapeo - ¡0 publicaciones remapeadas!

Estoy intentando buscar y reemplazar algunas imágenes rotas que quedaron tras nuestra migración del foro a Discourse y he tenido mucho éxito (¡me encanta el comando remap!), pero no está encontrando nada que reemplazar en estos ejemplos y no veo nada mal, ¿puedes tú?

Contenido de ejemplo:

<img src="https://londonbikers.com/images/transparent.png" alt="PICT0738.JPG" data-orig-src="upload://1yz82u6bbkaAQ7xP06qNTmX9qy3.JPG" width="666" height="500" class="d-lazyload">

y

<img src="https://londonbikers.com/images/transparent.png" alt="Rhonda.JPG" data-orig-src="upload://vXQ67D17QssTe5cu6lamJ5XB5Ep.JPG" width="590" height="500" class="d-lazyload">

Necesito hacer esto en dos pasos, ya que debo mantener el contenido de la etiqueta alt y reconstruir el elemento img alrededor de él. Está fallando en el primer remap:

es decir, BUSCAR:
<img src="https://londonbikers.com/images/transparent.png" alt="

y REEMPLAZAR con:
<img src="https://londonbikersarchive.blob.core.windows.net/forum-attachments/

He asumido que las comillas dobles deben escaparse con una barra invertida, ¿verdad? Así que he usado este comando:

rake posts:remap["<img src=\"https://londonbikers.com/images/transparent.png\" alt=\"","<img src=\"https://londonbikersarchive.blob.core.windows.net/forum-attachments/"]

Pero me indican 0 posts remapeados! cuando hay miles de publicaciones con esos elementos. ¿Alguna idea?

Mi segundo paso sería luego remapear el final de la etiqueta de:
width="666" height="500" class="d-lazyload">

a:
/>

¡Oh, espera! Algunas de estas imágenes sí funcionan. ¿Es esta la funcionalidad de adjuntos de Discourse? ¿Hay alguna lógica de renderizado personalizada en lugar de que sean cadenas HTML en la base de datos?

Por ejemplo, esto muestra una foto:

<img src="https://londonbikers.com/uploads/default/original/1X/25b381a9dc03f023a1c5d0af4f2f3132dfbf45c7.jpg" alt="The_rides_0010.jpg" width="640" height="480" class="d-lazyload">

Pero esta otra no. Puedo tener el archivo en almacenamiento de blobs en la nube, así que me gustaría importararlo a Discourse o simplemente referenciarlo desde el almacenamiento de blobs:

<img src="https://londonbikers.com/images/transparent.png" alt="__2.jpg" data-orig-src="upload://411oUp2Yn6wumJCRAiFptkwTF58.jpg" width="662" height="500" class="d-lazyload">

¿Están esas imágenes en raw?

Creo que en lugar de hacerlo con remap, te será mejor usar Ruby en la consola de Rails.

Lo siento, no entendí nada de eso, Jay :slight_smile:

¿En crudo, como formato de archivo? No, solo los formatos web habituales. ¿Haciendo qué en la consola de Rails?

raw es el campo donde está el texto que ves en el editor. Lo que estás reemplazando es lo que ves si editas la publicación en la interfaz de usuario, ¿verdad? (cooked es lo que ha sido procesado y es lo que se muestra.)

Haciendo cosas para reescribir las publicaciones. Esto podría ser suficiente para hacerte peligroso:

bps = Post.where("raw like '%//SOME-STRING%'")
bps.each do |post|
  post.raw.gsub!(/OLD/,'NEW')
  post.save
end

La ventaja sobre la tarea rake es que no tienes que navegar por múltiples niveles de escape.