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.