Qualcosa che non riesco a spiegare provoca copie duplicate di immagini

Sto lavorando con un sito ospitato a cui mancano alcune immagini.

Una delle immagini mancanti, presa da una revisione precedente di un post, punta a https://aws1.discourse-cdn.com/business7/uploads/harness/original/2X/1/16d12d54b3b4ae7aabc8a93417570bce0984e3c9.png

Sembra che l’immagine sia in S3 ma non nella tabella Uploads. In precedenza sono stato in grado di riaggiungere le immagini in un nuovo post per creare un nuovo record di caricamento, il che corregge tutti i post che utilizzano quell’immagine quando vengono ricompilati.

Ho prima provato a incollare l’URL sperando che Discourse scaricasse l’immagine e creasse un record di caricamento, ma non l’ha fatto, quindi l’ho caricata tramite il browser, ma la nuova immagine è diversa e ottiene questo URL: https://aws1.discourse-cdn.com/business7/uploads/harness/original/2X/d/d59e3eccc6d9d038b6fae8910e787e851c8714de.png (c’è la possibilità che io abbia invertito quale immagine fosse quale).

Inoltre, c’è la questione di come i record siano mancanti dalla tabella Uploads in primo luogo. Sto lavorando con un altro sito precedentemente ospitato, a cui mancano anche molte immagini dalla tabella Uploads. Questo potrebbe meritare un secondo argomento, ma potrebbe essere correlato. Per molte di quelle immagini, sono stato in grado di trovarle in S3, scaricarle e creare un nuovo record di caricamento come questo:

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

Sembra che questo metodo correggerà circa il 25% dei post interessati sull’altro sito.

Non capisco bene come il titolo di questo argomento sia correlato al resto.\n\nL’originale che hai linkato è una PNG da 14Kb. Un’immagine di dimensioni così ridotte non attiverà la routine di ottimizzazione delle immagini lato client.

Allora sono ancora più confuso su come la stessa immagine stia generando due SHA1/percorsi diversi?

Ho scaricato l’immagine da un bucket e l’ho caricata tramite il browser e ha generato una seconda copia della stessa immagine con un nome file diverso. I due file sono diversi; se non è stata modificata dal browser durante il caricamento, allora non so cos’altro potrebbe averla modificata.

Oh. Forse l’immagine nel bucket è stata modificata rispetto all’immagine originale che è stata caricata, quindi è diversa dall’immagine originale. Quindi ciò che dovrebbe accadere è scaricare l’immagine originale piuttosto che . . . no. original è nel percorso.