시나리오:
- 무료 이미지 호스팅 서비스(이 예시에서는
foo-host)가 폐쇄되었고, 현재 Discourse 포럼의 게시물들에 해당 서비스에서 핫링크된 이미지들이 다수 포함되어 있습니다. - 이미지들이 손상되기 전에 수동으로 백업되어 로컬 파일 시스템에 존재합니다.
- 이미지 URL과 로컬 파일 경로 간의 매핑이 존재합니다:
get_paths_from_hotlinked_urls()
다음과 같이 하고 싶습니다:
- 각 이미지에 대해 Rails 첨부파일(attachment)을 생성하고
- 이를 게시물에 올바르게 추가하는 것입니다.
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
낮은 퀄리티의 게시글을 올린 것 같아 죄송합니다. 오늘 좀 스트레스를 받고 있어서요, ㅋㅋ
누군가 올바른 방향으로 이끌어 주실 수 있을까요? 너무 번거롭다면 완전한 솔루션은 필요 없습니다. 감사합니다