설명할 수 없는 문제로 이미지 중복 사본이 생성됩니다

이미지가 일부 누락된 호스팅된 사이트를 다루고 있습니다.

누락된 이미지 중 하나는 이전 게시물 리비전(수정본)에서 가져온 것이며, 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%를 수정할 것으로 보입니다.

이 주제의 제목이 나머지 내용과 어떻게 관련이 있는지 정확히 이해가 안 됩니다.

링크하신 원본 이미지는 14KB 크기의 PNG 파일입니다. 이렇게 작은 크기의 이미지는 클라이언트 측 이미지 최적화 루틴을 트리거하지 않습니다.

그럼에도 불구하고 같은 이미지가 왜 서로 다른 두 개의 SHA1 해시값/경로를 생성하는지 더 혼란스럽습니다.

한 버킷에서 이미지를 다운로드한 후 브라우저로 업로드했는데, 다른 파일명을 가진 같은 이미지의 두 번째 사본이 생성되었습니다. 두 파일은 서로 다릅니다. 업로드 과정에서 브라우저가 파일을 변경하지 않았다면, 무엇이 파일을 변경했을지 알 수 없습니다.

아. 어쩌면 버킷에 있는 이미지가 업로드된 원래 이미지에서 변경되었기 때문에 원본 이미지와 다를 수 있겠네요. 그렇다면 원본 이미지를 다운로드해야 하는데… 아니요. 경로에 original이 포함되어 있네요.