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.