新しいサーバーに移行すると、拡張機能が「不明」のため、ユーザーアバターを生成できません

編集:この件をバグとして再分類します。私よりも詳しく理解している人に確認してもらいたいからです。

複数のアップロードファイルの拡張子が「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

Sidekiq には、欠落しているアバターを作成するトリガーがあります。

時間がかかりますが、私の認識が間違っていなければ、これで解決するはずです。

「いいね!」 2

いい案ですね!User.refresh_avatar を呼び出していますが、残念ながら

  user = User.find_by_username('broken_avatar_guy')
  user.refresh_avatar

これでもこの問題は解決しません。

「いいね!」 2

ヒント:

ActionController::RoutingError (No route matches [GET] "/user_avatar/community.example.com/broken_user")
「いいね!」 1

ユーザーがアカウントにログインした際に更新しますか?

そうは思いません。

user.user_avatar.custom_upload には正しい URL が含まれていますが、https://community.example.com/user_avatar/community.example.com/bad_user/25/321_2.png のアバター画像が欠落しています。これらのアバターサムネイルを再構築する方法を見つける必要があります。

ユーザーログインのコードに force_avatar_update があるのを確認しました。

これは非常に役立つかもしれません。まさにこの仕事ですね

何かおかしいようです:

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

これは正当なバグであり、Jeffも:heart:(気に入って)くれたと思いますが、これ以上注目されていません。

私がクレイジーなのか、それとも何かが壊れているのでしょうか?

「いいね!」 2

/communityからcommunity.example.comにサイトをバックアップと復元で移動しました」

これは、あなたがここで不満を言っているのは復元時のアーティファクトであり、おそらくこの特定のバックアップと復元に固有のものだから、私たちの復元ではこれに遭遇しなかったのだと思いますか?

「いいね!」 1