Ayuda con acción masiva: reemplazar imágenes enlazadas con archivos de imagen locales

escenario:

  • un host de imágenes gratuito (foo-host en este ejemplo) ha dejado de funcionar y un foro de Discourse tiene un montón de imágenes enlazadas en sus publicaciones
  • las imágenes se respaldaron manualmente antes de que se corrompieran y existen en el sistema de archivos local
  • existe un mapeo entre la URL de la imagen y la ruta del archivo local: get_paths_from_hotlinked_urls()

cómo puedo:

  1. crear un adjunto en Rails para cada una de estas imágenes y
  2. añadirlas correctamente a la publicación?
image_host_domain = 'foo-host.com'

hotlink_posts = Post.where('cooked ~ ?', image_host_domain)
puts "encontrados #{hotlink_posts.length} posts con imágenes enlazadas..."

hotlink_posts.each do |p|
  # obtener todas las URLs en la publicación que contienen image_host_domain
  urls = URI.extract(p.cooked).select { |url| url[/#{Regexp.quote(image_host_domain)}/] }

  local_paths = get_paths_from_hotlinked_urls(urls)

  new_raw = p.raw
  urls.each.with_index do |url, i|
    next if local_paths[i].blank?

    # ***** TODO: 1) 'subir' local_paths[i] como adjunto
    #                y asociarlo correctamente con la publicación

    # ***** TODO: 2) reemplazar el enlace directo con el adjunto
    # new_raw = new_raw...
  end

  p.update(raw: new_raw)
end

disculpen la publicación de bajo esfuerzo. solo me siento un poco estresado hoy, lol

¿alguien puede indicarme la dirección correcta? no se requiere una solución completa si es demasiado complicado. gracias

1 me gusta

Puede consultar los scripts de importación para ver ejemplos de cómo cargar archivos e insertar el HTML para esas cargas.

2 Me gusta