Quelque chose que je ne peux pas expliquer entraîne des copies d'images en double

Je travaille avec un site hébergé auquel il manque certaines images.

L’une des images manquantes, tirée d’une ancienne révision d’une publication, pointe vers https://aws1.discourse-cdn.com/business7/uploads/harness/original/2X/1/16d12d54b3b4ae7aabc8a93417570bce0984e3c9.png

Il semble que l’image soit dans S3 mais pas dans la table Uploads. Auparavant, j’ai pu réajouter des images dans une nouvelle publication pour qu’un nouvel enregistrement d’upload soit créé, ce qui corrige toutes les publications utilisant cette image lorsqu’elles sont ré-cuites.

J’ai d’abord essayé de coller l’URL en espérant que Discourse télécharge l’image et crée un enregistrement d’upload, mais cela n’a pas fonctionné. J’ai donc téléversé l’image via le navigateur, mais la nouvelle image est différente et obtient cette URL : https://aws1.discourse-cdn.com/business7/uploads/harness/original/2X/d/d59e3eccc6d9d038b6fae8910e787e851c8714de.png (il est possible que j’aie inversé les images).

Il y a aussi la question de savoir comment les enregistrements ont disparu de la table Uploads en premier lieu. Je travaille avec un autre site anciennement hébergé, qui manque également un grand nombre d’images dans la table Uploads. Cela pourrait mériter un autre sujet, mais cela pourrait être lié. Pour un grand nombre de ces images, j’ai pu les trouver dans S3, les télécharger et créer un nouvel enregistrement d’Upload comme ceci :

  sha1= Upload.sha1_from_short_url(short_url)
  extension = short_url.split(".").last
  upload = Upload.find_by(sha1: sha1)
  prefix = "url du bucket s3"
  if !upload
    # essayer de la trouver dans 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
      # créer l'upload pour le fichier
   ...

Il semble que cette méthode corrigera environ 25 % des publications affectées sur l’autre site.

Je ne comprends pas tout à fait comment le titre de ce sujet se rapporte au reste.\n\nL’original que vous avez lié est un PNG de 14 Ko. Une image de si petite taille ne déclenchera pas la routine d’optimisation d’image côté client.

Alors je suis encore plus confus de voir comment la même image génère deux SHA1/chemins différents ?

J’ai téléchargé l’image d’un bucket et l’ai téléchargée via le navigateur, et cela a généré une deuxième copie de la même image avec un nom de fichier différent. Les deux fichiers sont différents ; si elle n’a pas été modifiée par le navigateur lors du téléchargement, alors je ne sais pas ce qui d’autre aurait pu la modifier.

Oh. Peut-être que l’image dans le bucket a été modifiée par rapport à l’image originale qui a été téléchargée, donc elle est différente de l’image originale. Donc ce qui devrait se passer, c’est télécharger l’image originale plutôt que… non. original est dans le chemin.