2.6へのアップグレード後、カテゴリページとホームページでエラー500が発生

こんにちは、

2017 年から運用していたフォーラムを 2.4 から 2.6 にアップグレードしました。
アップグレード中に、PostgreSQL 9.5 が PostgreSQL 12 に置き換えられていることに気づきました。

再構築操作はエラーなしで完了しましたが、ホームページでエラー 500(または「おっと」というメッセージ)が表示されます。
カテゴリページでも同様のエラーが発生しています。
管理者画面、ユーザープロフィール、ユーザー一覧、個別の投稿は正常に動作しています。
ただし、管理者画面の「トップ参照元」は動作しません。

解決策が思いつきません。
よろしくお願いいたします。

プラグインはインストールされていますか?

/logs に何かありますか?

おっしゃる通りです。/logs に同じエラーが何度も記録されています。

NoMethodError (nil:NilClass に hex' メソッドが定義されていません) app/models/upload.rb:180:in base62_sha1’
app/models/upload.rb:174:in short_path' app/models/upload.rb:146:in short_path’
app/models/group.rb:767:in flair_url' (eval):5:in _fast_attributes’
lib/freedom_patches/ams_include_without_root.rb:54:in include!' lib/freedom_patches/ams_include_without_root.rb:57:in include!’
lib/freedom_patches/ams_include_without_root.rb:57:in include!' app/controllers/application_controller.rb:440:in serialize_data’
app/controllers/application_controller.rb:449:in render_serialized' lib/topic_list_responder.rb:16:in block (2 levels) in respond_with_list’
lib/topic_list_responder.rb:9:in respond_with_list' app/controllers/list_controller.rb:102:in block (2 levels) in class:ListController
app/controllers/list_controller.rb:107:in public_send' app/controllers/list_controller.rb:107:in block (2 levels) in class:ListController
app/controllers/application_controller.rb:340:in block in with_resolved_locale' app/controllers/application_controller.rb:340:in with_resolved_locale’
lib/middleware/omniauth_bypass_middleware.rb:68:in call' lib/content_security_policy/middleware.rb:12:in call’
lib/middleware/anonymous_cache.rb:336:in call' config/initializers/100-quiet_logger.rb:19:in call’
config/initializers/100-silence_logger.rb:31:in call' lib/middleware/enforce_hostname.rb:22:in call’
lib/middleware/request_tracker.rb:176:in `call’

残念ながら、セーフモードで起動してすべてを無効にしても問題は解決しません。
まだエラーが発生しています。

ログにこのエラーが何度も表示されます:

NoMethodError (nil:NilClass に対して hex メソッドが定義されていません) app/models/upload.rb:180:in base62_sha1' app/models/upload.rb:174:in short_path’ app/models/upload.rb:146:in `short_path’ app/models/group.rb:

また、管理ダッシュボードでは、一部のメトリクス(Top Referred Topics)でエラーが発生します:
「申し訳ありませんが、リクエストに時間がかかりすぎました」

以前、同じ問題に遭遇したことがあります。その原因は、カテゴリ画像が欠落していたことです。Discourse は画像の寸法を取得しようとして失敗します。

カテゴリ画像を削除してみてください。

復元を試みましたが、エラーが発生しました:

[2020-08-27 10:06:41] Sidekiqを一時停止中…
[2020-08-27 10:06:41] Sidekiqがジョブの実行を完了するまで最大60秒間待機中…
[2020-08-27 10:38:40] 例外:ERROR: デッドロックが検出されました
DETAIL: プロセス594は、データベース16569のリレーション1113165に対するAccessExclusiveLockを待機中ですが、プロセス1617によってブロックされています。
プロセス1617は、データベース16569のリレーション1113221に対するAccessShareLockを待機中ですが、プロセス594によってブロックされています。
HINT: クエリの詳細については、サーバーログを参照してください。
CONTEXT: SQL文 “ALTER TABLE public.categories SET SCHEMA backup;”
PL/pgSQL関数 inline_code_block 行11のEXECUTE

カテゴリ画像がありません :frowning:

Hmm :thinking:
グループのフライルかもしれませんね?

グループのフラグが原因かどうかを特定し、その問題を解決する方法は?
ありがとうございます。

グループのアバター装飾を削除するか、再アップロードして、問題が解決するか確認してください。

これで解決しました、@michaeld さん!素晴らしい仕事です。@Olivier_Baillon さん、Michael さんの投稿を解決策としてマークしてください!

他にも同様の問題を抱えている方がいらっしゃる場合は、以下のような手順を実行してください。

cd /var/discourse
./launcher enter app
rails c
Group.all.pluck(:id,:flair_icon,:flair_upload_id)
# `flair_upload_id` が設定されているグループの場合、以下のようにします
g=Group.find(GROUP_ID_FROM_THE_LIST) # これは flair_upload_id ではなく id です
g.flair_upload
g.save

よりエレガントな方法もありますが、数が少ない場合はこれで始められるはずです。

ありがとうございます @michaeld さん、@pfaffman さん
私一人では絶対にそれを見つけることはできませんでした。
本当にありがとうございます