pfaffman
(Jay Pfaffman)
1
編集:この件をバグとして再分類します。私よりも詳しく理解している人に確認してもらいたいからです。
複数のアップロードファイルの拡張子が「unknown」となっていました。これではサムネイルを生成できません。これは、バックアップを新しいサイトに移行し、その後サムネイルを再生成しようとした際に発生したのではないかと考えています。
サムネイル生成時に拡張子が「unknown」の場合、拡張子を置換すべきだと考えます。例えば以下のようにします。
upload.extension = upload.original_filename.split('.').last
もしどこかでこの処理が行われていれば、4時間もこの件に悩まされずに済んだはずです。
待ってください。これが問題のようです。なぜファイル名から拡張子を取得するのではなく、false を返しているのでしょうか?
以下に詳細な経緯を記します。
/community から community.example.com へサイトを移動させるために、バックアップとリストアを行いました。その後、以下のコマンドでアップロードファイルのパスを修正しました。
RAILS_ENV=production bundle exec script/discourse remap '/community/uploads' '/uploads'
しかし、アバターは依然として「Gray Man」のままです。
user.user_avatar.custom_upload.url を確認し、その URL をブラウザに貼り付けると、期待通りのアバターが表示されます。ユーザーを「再焼き」する必要があるようです。
もしかして以下のようなタスクを実行すれば直るかと考えました。
rake avatars:refresh
または
rake avatars:clean
しかし、どちらも効果はありませんでした。
何が足りないのでしょうか?
「いいね!」 1
IAmGav
(Gavin Perch)
2
Sidekiq には、欠落しているアバターを作成するトリガーがあります。
時間がかかりますが、私の認識が間違っていなければ、これで解決するはずです。
「いいね!」 2
pfaffman
(Jay Pfaffman)
3
いい案ですね!User.refresh_avatar を呼び出していますが、残念ながら
user = User.find_by_username('broken_avatar_guy')
user.refresh_avatar
これでもこの問題は解決しません。
「いいね!」 2
pfaffman
(Jay Pfaffman)
4
ヒント:
ActionController::RoutingError (No route matches [GET] "/user_avatar/community.example.com/broken_user")
「いいね!」 1
IAmGav
(Gavin Perch)
5
ユーザーがアカウントにログインした際に更新しますか?
pfaffman
(Jay Pfaffman)
6
そうは思いません。
user.user_avatar.custom_upload には正しい URL が含まれていますが、https://community.example.com/user_avatar/community.example.com/bad_user/25/321_2.png のアバター画像が欠落しています。これらのアバターサムネイルを再構築する方法を見つける必要があります。
IAmGav
(Gavin Perch)
7
ユーザーログインのコードに force_avatar_update があるのを確認しました。
IAmGav
(Gavin Perch)
8
これは非常に役立つかもしれません。まさにこの仕事ですね
pfaffman
(Jay Pfaffman)
9
何かおかしいようです:
user = User.find_by_username('Tuomo')
upload_id = user.user_avatar.custom_upload.id
upload = Upload.find(upload_id)
Discourse.avatar_sizes.each do |size|
OptimizedImage.create_for(upload, size, size)
end
OptimizedImage.where(upload_id: upload_id)
最適化された画像が生成されません。
broken_uploads = Upload.where(extension: "unknown")
broken_uploads.each do |upload|
upload.extension = upload.original_filename.split('.').last
upload.save
end
これで修正されます。
その後、新しいサムネイルを生成するだけです。以下のようにします:
has_upload = UserAvatar.where("custom_upload_id > 0")
has_upload.each do |user_avatar|
Jobs.enqueue(:create_avatar_thumbnails, { upload_id: user_avatar.custom_upload_id })
end
「いいね!」 2
pfaffman
(Jay Pfaffman)
10
これは正当なバグであり、Jeffも:heart:(気に入って)くれたと思いますが、これ以上注目されていません。
私がクレイジーなのか、それとも何かが壊れているのでしょうか?
「いいね!」 2
「/communityからcommunity.example.comにサイトをバックアップと復元で移動しました」
これは、あなたがここで不満を言っているのは復元時のアーティファクトであり、おそらくこの特定のバックアップと復元に固有のものだから、私たちの復元ではこれに遭遇しなかったのだと思いますか?
「いいね!」 1