Algo que não consigo explicar resulta em cópias duplicadas de imagens

Estou trabalhando com um site hospedado que está faltando algumas imagens.

Uma das imagens ausentes, retirada de uma revisão anterior de uma postagem, aponta para https://aws1.discourse-cdn.com/business7/uploads/harness/original/2X/1/16d12d54b3b4ae7aabc8a93417570bce0984e3c9.png

Parece que a imagem está no S3, mas não na tabela Uploads. Anteriormente, eu conseguia reenviar imagens em uma nova postagem para que um novo registro de upload fosse criado, o que corrigia todas as postagens que usavam essa imagem quando elas eram refeitas.

Primeiro, tentei colar o URL esperando que o Discourse baixasse a imagem e criasse um registro de upload, mas não funcionou. Então, fiz o upload pelo navegador, mas a nova imagem é diferente e recebe este URL: https://aws1.discourse-cdn.com/business7/uploads/harness/original/2X/d/d59e3eccc6d9d038b6fae8910e787e851c8714de.png (há uma chance de eu ter invertido qual imagem era qual).

Há também a questão de como os registros estão faltando na tabela Uploads em primeiro lugar. Estou trabalhando com outro site anteriormente hospedado, que também está faltando várias imagens na tabela Uploads. Isso pode merecer um segundo tópico, mas pode estar relacionado. Para muitas dessas imagens, consegui encontrá-las no S3, baixá-las e criar um novo registro de Upload como este:

  sha1= Upload.sha1_from_short_url(short_url)
  extension = short_url.split(".").last
  upload = Upload.find_by(sha1: sha1)
  prefix = "url para o bucket s3"
  if !upload
    # tenta encontrá-lo no 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
      # cria upload para o arquivo
   ...

Parece que este método corrigirá cerca de 25% das postagens afetadas no outro site.

Não entendi bem como o título deste tópico se relaciona com o resto dele.

O original que você linkou é um PNG de 14Kb. Uma imagem de tamanho tão pequeno não acionará a rotina de otimização de imagem do lado do cliente.

Então, estou ainda mais confuso sobre como a mesma imagem está gerando dois SHA1s/caminhos diferentes?

Baixei a imagem de um bucket e a carreguei pelo navegador, e ela gerou uma segunda cópia da mesma imagem com um nome de arquivo diferente. Os dois arquivos são diferentes; se não foi alterado pelo navegador no upload, então não sei o que mais poderia tê-lo alterado.

Ah. Talvez a imagem no bucket tenha sido alterada da imagem original que foi carregada, então ela é diferente da imagem original. Então, o que precisaria acontecer é baixar a imagem original em vez de . . . não. original está no caminho.