이미지가 일부 누락된 호스팅된 사이트를 다루고 있습니다.
누락된 이미지 중 하나는 이전 게시물 리비전(수정본)에서 가져온 것이며, https://aws1.discourse-cdn.com/business7/uploads/harness/original/2X/1/16d12d54b3b4ae7aabc8a93417570bce0984e3c9.png 를 가리키고 있습니다.
이미지는 S3에는 존재하는 것으로 보이지만 Uploads 테이블에는 없습니다. 이전에 새 게시물에 이미지를 다시 추가하여 새로운 업로드 기록을 생성하면, 해당 이미지를 사용하는 모든 게시물이 다시 베이킹(rebake)될 때 문제가 해결되었습니다.
처음에는 URL을 붙여넣으면 Discourse가 이미지를 다운로드하여 업로드 기록을 생성할 것으로 기대했지만, 그렇게 되지 않았습니다. 그래서 브라우저를 통해 업로드했지만, 새 이미지는 다르며 다음과 같은 URL을 갖게 되었습니다: https://aws1.discourse-cdn.com/business7/uploads/harness/original/2X/d/d59e3eccc6d9d038b6fae8910e787e851c8714de.png (어떤 이미지가 어떤 이미지였는지 역전된 가능성도 있습니다).
또한, 왜 처음부터 Uploads 테이블에서 기록이 누락되었는지에 대한 질문이 있습니다. 이전에 호스팅되었던 다른 사이트에서도 Uploads 테이블에서 많은 이미지가 누락되어 있습니다. 이는 별도의 주제일 수 있지만 관련이 있을 수도 있습니다. 해당 이미지 중 일부는 S3에서 찾아내어 다운로드한 후, 다음과 같이 새로운 Upload 기록을 생성할 수 있었습니다:
sha1= Upload.sha1_from_short_url(short_url)
extension = short_url.split(".").last
upload = Upload.find_by(sha1: sha1)
prefix = "url for the s3 bucket"
if !upload
# try to find it in s3
one = sha1[0]
two=sha1[1]
url_link = "#{prefix}/#{one}/#{two}/#{sha1}.#{extension}"
puts "URL: #{url_link}"
url = URI.parse(url_link)
full_filename = url_link.gsub(remove_url,"/shared/uploads/default/")
filename = "/tmp/#{File.basename(url_link.gsub(remove_url,"/shared/uploads/default/"))}"
dirname = File.dirname(filename)
unless File.directory?(dirname)
FileUtils.mkdir_p(dirname)
end
File.open(filename, "w") do |file|
Net::HTTP.start(url.host) do |http|
resp = http.get(url.path)
open(file, "wb") do |file|
file.write(resp.body)
end
end
end
# make upload for file
...
이 방법은 다른 사이트에서 영향을 받은 게시물의 약 25%를 수정할 것으로 보입니다.