일괄 작업 도움말: 링크된 이미지를 로컬 이미지 파일로 교체하기

시나리오:

  • 무료 이미지 호스팅 서비스(이 예시에서는 foo-host)가 폐쇄되었고, 현재 Discourse 포럼의 게시물들에 해당 서비스에서 핫링크된 이미지들이 다수 포함되어 있습니다.
  • 이미지들이 손상되기 전에 수동으로 백업되어 로컬 파일 시스템에 존재합니다.
  • 이미지 URL과 로컬 파일 경로 간의 매핑이 존재합니다: get_paths_from_hotlinked_urls()

다음과 같이 하고 싶습니다:

  1. 각 이미지에 대해 Rails 첨부파일(attachment)을 생성하고
  2. 이를 게시물에 올바르게 추가하는 것입니다.
image_host_domain = 'foo-host.com'

hotlink_posts = Post.where('cooked ~ ?', image_host_domain)
puts "found #{hotlink_posts.length} posts with hotlinked images..."

hotlink_posts.each do |p|
  # 게시물 cooked 필드에서 image_host_domain을 포함하는 모든 URL 가져오기
  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) local_paths[i]를 첨부파일로 '업로드'하고
    #                게시물에 올바르게 연결

    # ***** TODO: 2) 핫링크를 첨부파일로 대체
    # new_raw = new_raw...
  end

  p.update(raw: new_raw)
end

낮은 퀄리티의 게시글을 올린 것 같아 죄송합니다. 오늘 좀 스트레스를 받고 있어서요, ㅋㅋ

누군가 올바른 방향으로 이끌어 주실 수 있을까요? 너무 번거롭다면 완전한 솔루션은 필요 없습니다. 감사합니다

파일 업로드 및 해당 업로드의 HTML 삽입 방법을 확인하려면 가져오기 스크립트를 참고하세요.