ホストされているサイトで画像がいくつか欠落しています。
欠落している画像のうちの1つは、以前の投稿の改訂版から取得されたもので、https://aws1.discourse-cdn.com/business7/uploads/harness/original/2X/1/16d12d54b3b4ae7aabc8a93417570bce0984e3c9.png を指しています。
画像はS3には存在するようですが、Uploadsテーブルには存在しないようです。以前は、新しい投稿に画像を再追加することで新しいアップロードレコードが作成され、それがリベイクされたときにその画像を使用しているすべての投稿を修正することができました。
最初にURLを貼り付けて、Discourseが画像をダウンロードしてアップロードレコードを作成してくれることを期待しましたが、うまくいきませんでした。その後、ブラウザからアップロードしましたが、新しい画像は異なり、このURLが生成されました: https://aws1.discourse-cdn.com/business7/uploads/harness/original/2X/d/d59e3eccc6d9d038b6fae8910e787e851c8714de.png (どちらの画像がどちらであったか逆になっている可能性があります)。
また、そもそもUploadsテーブルからレコードが欠落している理由も疑問です。現在、別の以前ホストされていたサイトでも作業していますが、そのサイトでもUploadsテーブルから多くの画像が欠落しています。これは別のトピックにする価値があるかもしれませんが、関連している可能性があります。それらの画像の多くについては、S3で見つけてダウンロードし、次のような新しいUploadレコードを作成することができました。
sha1= Upload.sha1_from_short_url(short_url)
extension = short_url.split(".").last
upload = Upload.find_by(sha1: sha1)
prefix = "S3バケットのURL"
if !upload
# 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
# ファイルのアップロードを作成
...
この方法では、他のサイトで影響を受けている投稿の約25%が修正されるようです。