Ajuda com ação em massa: substituir imagens vinculadas por arquivos de imagem locais

cenário:

  • um host de imagem gratuito (foo-host neste exemplo) deixou de existir, e um fórum discourse atualmente tem um monte de imagens hotlinked em suas postagens
  • as imagens foram salvas manualmente antes de apodrecerem e existem no sistema de arquivos local
  • existe um mapeamento entre a url da imagem e o caminho do arquivo local: get_paths_from_hotlinked_urls()

como posso:

  1. criar um anexo no rails para cada uma dessas imagens e
  2. adicioná-las à postagem corretamente?
image_host_domain = 'foo-host.com'

hotlink_posts = Post.where('cooked ~ ?', image_host_domain)
puts "encontrado #{hotlink_posts.length} posts com imagens hotlinked..."

hotlink_posts.each do |p|
  # obter todas as URLs na postagem contendo 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) 'upload' local_paths[i] como anexo
    #                e associá-lo corretamente à postagem

    # ***** TODO: 2) substituir o hotlink por anexo
    # new_raw = new_raw...
  end

  p.update(raw: new_raw)
end

desculpe pela postagem de baixo esforço. estou apenas me sentindo um pouco estressado hoje, lol

alguém pode me apontar na direção certa? solução completa não é necessária se for muito incômodo. obrigado

1 curtida

Você pode consultar os scripts de importação para ver exemplos de como fazer upload de arquivos e inserir o HTML para esses uploads.

2 curtidas