vBulletin のインポートをホストされている顧客向けに行っています。アバターが消失し、現在は これ のような一般的な空白の人型のアイコンとして表示されています。
以前は表示されていたと確信しています。URL を見ると、何かが含まれているはずです。それらを見つける方法はありませんか?
vBulletin のインポートをホストされている顧客向けに行っています。アバターが消失し、現在は これ のような一般的な空白の人型のアイコンとして表示されています。
以前は表示されていたと確信しています。URL を見ると、何かが含まれているはずです。それらを見つける方法はありませんか?
Maybe related to that?
Do you have a backup where you can check the URL?
Are they in the tombstone?
I did a fresh import and all of the avatars are missing. Sidekiq still has 13M things to process, but I don’t see how that could be the problem. I did another import on another site with what I believe to be the same import script and the avatars are fine there.
pry(main)> User.find_by_username('MysteryManAvatar').uploaded_avatar
=> #<Upload:0x0000558a0d31b478
id: 97,
user_id: 114,
original_filename: "clevername.jpg",
filesize: 2028,
width: 90,
height: 67,
url: "/uploads/default/original/1X/080817dcf59ddc838054fba9716b62fce9ae3d83.jpg",
created_at: Thu, 19 Apr 2018 23:51:15 UTC +00:00,
updated_at: Thu, 19 Apr 2018 23:51:15 UTC +00:00,
sha1: "080817dcf59ddc838054fba9716b62fce9ae3d83",
origin: nil,
retain_hours: nil,
extension: "jpg">
But that file isn’t in uploads (or tombstone).
I looked at Avatars not showing after import and that didn’t seem to be related.
バックアップからデータベースをリストアしました(古いバージョンからのデータベースマイグレーションがあり、backup.sql.gz にはアップロードファイルではなく SQL のみが含まれていました)。
残念ながら、サイト上でアバターが表示されません(デフォルトのプレースホルダーのみ表示されます)。
データベース内では正しく保存されており、URL も正しく、PNG ファイルも存在しているようです。
root@og-app:/var/www/discourse# rails c
[1] pry(main)> User.find_by_username('Overgrow').uploaded_avatar
=> #<Upload:0x0000565323a78880
id: 2936,
user_id: 1,
original_filename: "avatar.png",
filesize: 161585,
width: nil,
height: nil,
url: "/uploads/default/original/2X/f/fbba12aa89b1bc45676efcfa55affd4b7a76edf1.png",
created_at: Sat, 03 Sep 2016 10:26:23 UTC +00:00,
updated_at: Sat, 22 Feb 2020 11:57:35 UTC +00:00,
sha1: "fbbe22aa89b1bc45676efcfa55affd4b7a76edf1",
origin: nil,
retain_hours: nil,
extension: "unknown",
thumbnail_width: nil,
thumbnail_height: nil,
etag: nil,
secure: false,
access_control_post_id: nil,
original_sha1: nil>
次に何を試すべきかアドバイスいただけますでしょうか?よろしくお願いいたします!
追記:
いくつかのアバターはバックグラウンドで再生成されました…この処理を高速化することはできますか?あるいは手動で実行することは可能でしょうか?
私の観察によると、この部分が問題の原因の兆候ではないでしょうか?
extension: "unknown",
再生成されたアバターでは、このフィールドが次のように埋められているようです:
extension: "JPG",
何らかの理由で、1.6 から 2.5 への Discourse のバックアップ復元とマイグレーション後、Upload テーブルの width、height、extension の値が欠落していました(ファイルポインタは正しく、ファイルも適切な場所にありました)。
結局、カスタムアップロードされたアバターをすべて確認し、拡張子と寸法を修正するとともに、バージョン 2 のサムネイルが欠落していた OptimizedImages をすべて再生成するスクリプトを作成しました。
興味のある方のために、以下にそのスクリプトを示します:
fix-avatars.rb
require File.expand_path("../../config/environment", __FILE__)
generated_count = 0
scope = UserAvatar.where("custom_upload_id > 0")
scope.find_each do |ua|
upload_id = ua.custom_upload_id
upload = Upload.find_by(id: upload_id)
unless upload
puts "\nこのユーザーのアバターに対応するアップロードが見つかりません"
next
end
# 不明な拡張子を修正
if upload.extension === 'unknown'
upload.extension = nil
upload.save!
puts "\rupload_id #{upload.id} 拡張子 unknown -> nil"
end
if upload.extension.nil?
puts "\rupload_id #{upload.id} 拡張子を修正中"
upload.fix_image_extension
if upload.height == 0 || upload.width == 0
puts "\rupload_id #{upload.id} 寸法を修正中"
upload.fix_dimensions!
end
# 最適化バージョンを確認
correct_optimized = OptimizedImage.where(upload_id: upload_id)
.where(version: 2)
if correct_optimized.count < 1
puts "\rupload_id #{upload.id} にバージョン 2 のサムネイルがありません"
# 古い最適化画像を削除
puts "\rupload_id #{upload.id} アバターを削除中"
optimized = OptimizedImage.where(upload_id: upload_id)
if optimized
optimized.destroy_all
end
# 最適化画像を生成
puts "\rupload_id #{upload.id} アバターを生成中"
Discourse.avatar_sizes.each {|size| OptimizedImage.create_for(upload, size, size, allow_animation: SiteSetting.allow_animated_avatars)}
generated_count += 1
puts "\r合計 #{generated_count} 個のアバターを生成しました"
end
end
end