Etwas, das ich nicht erklären kann, führt zu doppelten Bildkopien

Ich arbeite mit einer gehosteten Website, auf der einige Bilder fehlen.

Eines der fehlenden Bilder, das aus einer früheren Überarbeitung eines Beitrags stammt, verweist auf https://aws1.discourse-cdn.com/business7/uploads/harness/original/2X/1/16d12d54b3b4ae7aabc8a93417570bce0984e3c9.png

Es scheint, dass das Bild in S3 vorhanden ist, aber nicht in der Uploads-Tabelle. Zuvor konnte ich Bilder in einem neuen Beitrag erneut hinzufügen, um einen neuen Upload-Datensatz zu erstellen, der alle Beiträge korrigiert, die dieses Bild verwenden, wenn sie neu gebacken werden.

Ich habe zuerst versucht, die URL einzufügen, in der Hoffnung, dass Discourse das Bild herunterlädt und einen Upload-Datensatz erstellt, aber das hat nicht funktioniert. Dann habe ich es über den Browser hochgeladen, aber das neue Bild ist anders und erhält diese URL: https://aws1.discourse-cdn.com/business7/uploads/harness/original/2X/d/d59e3eccc6d9d038b6fae8910e787e851c8714de.png (es besteht die Möglichkeit, dass ich vertauscht habe, welches Bild welches war).

Außerdem stellt sich die Frage, wie die Datensätze überhaupt aus der Uploads-Tabelle fehlen. Ich arbeite mit einer anderen, früher gehosteten Website, auf der ebenfalls eine Reihe von Bildern aus der Uploads-Tabelle fehlen. Dies könnte ein zweites Thema verdienen, aber es könnte damit zusammenhängen. Bei vielen dieser Bilder konnte ich sie in S3 finden, herunterladen und einen neuen Upload-Datensatz wie folgt erstellen:

  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
   ...

Diese Methode scheint etwa 25% der betroffenen Beiträge auf der anderen Website zu beheben.

Ich verstehe nicht ganz, wie der Titel dieses Themas mit dem Rest zusammenhängt.

Das Original, das Sie verlinkt haben, ist ein 14 KB großes PNG. Ein Bild dieser geringen Größe löst nicht die clientseitige Bildoptimierungsroutine aus.

Dann bin ich umso verwirrter, wie dasselbe Bild zwei verschiedene SHA1s/Pfade generiert?

Ich habe das Bild aus dem einen Bucket heruntergeladen und es über den Browser hochgeladen, und es wurde eine zweite Kopie desselben Bildes mit einem anderen Dateinamen generiert. Die beiden Dateien sind unterschiedlich; Wenn es nicht vom Browser beim Hochladen geändert wurde, weiß ich nicht, was es sonst geändert haben könnte.

Oh. Vielleicht wurde das Bild im Bucket gegenüber dem ursprünglich hochgeladenen Bild geändert, sodass es sich vom Originalbild unterscheidet. Was also passieren müsste, wäre, das Originalbild herunterzuladen anstatt . . . nein. original ist im Pfad.