ユーザーカードの読み込みに失敗しました

バージョンアップデート後、ユーザーのアバターをクリックしてもユーザーカードを読み込めなくなり、個人情報設定に入るとページが見つからないと表示されるようになりました。

昨日アップデートしましたが、User Cards は正常に読み込まれています。

セーフモードを確認してください。それが問題ない場合、テーマまたはテーマコンポーネントに問題がある可能性があります。

コンソールエラーがあれば提供していただけますか?

セーフモードでも読み込めません。ログ情報を以下に示します。


例外アプリミドルウェアでの例外処理に失敗しました : ActiveRecord::StatementInvalid : PG::UndefinedTable: ERROR: relation "gamification_leaderboard_cache_1_all_time" does not exist LINE 1: ...p.t

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "gamification_leaderboard_cache_1_all_time" does not exist LINE 1: ...p.total_score, p.position FROM "users" INNER JOIN gamificati.

それは関連があるかもしれませんが、私はブラウザログについて言及していました。共有していただけますか?

つまり、ブラウザコンソールです。(多くの場合 F12 で開きます)

topic-creator-avatar.hbr:1  [THEME 300 '最新主题摘要'] Compile error: unknown file extension 'hbr' (discourse/connectors/topic-list-before-columns/topic-creator-avatar.hbr)
(匿名) @ topic-creator-avatar.hbr:1
[新] 使用 Edge 中的 Copilot 来解释控制台错误: 单击
         
         以说明错误。
        了解更多信息
        不再显示
composer-action-title.js:62 ℹ️ Discourse v3.5.0.beta5-dev — https://github.com/discourse/discourse/commits/7820dd2b8f — Ember v5.12.0
post-placeholder.js:53  [PLUGIN discourse-chain-topics] Deprecation notice: Defining connector classes via registerConnectorClass is deprecated. See https://meta.discourse.org/t/32727 for more modern patterns. [deprecation id: discourse.register-connector-class-legacy]
o @ post-placeholder.js:53
p @ topic-link.js:12
registerConnectorClass @ group.js:15
(匿名) @ topic-custom-field-initializer.js:32
e1 @ group.js:15
initialize @ topic-custom-field-initializer.js:13
(匿名) @ composer-action-title.js:62
(匿名) @ item.js:166
e.each @ form-template-validation.js:54
e.walk @ form-template-validation.js:54
e.each @ form-template-validation.js:54
e.topsort @ form-template-validation.js:54
_runInitializer @ item.js:166
runInstanceInitializers @ item.js:166
_bootSync @ composer-action-title.js:62
didBecomeReady @ index.js:93
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_ensureInstance @ client-error-handler.js:88
schedule @ client-error-handler.js:88
f @ bookmark.js:114
waitForDOMReady @ index.js:93
init @ index.js:93
_ @ caret-position.js:86
create @ caret-position.js:86
(匿名) @ start-app.js:4
(匿名) @ discourse-boot.js:13
(匿名) @ discourse-boot.js:1
post-placeholder.js:53  [PLUGIN discourse-chain-topics] Deprecation notice: Defining connector classes via registerConnectorClass is deprecated. See https://meta.discourse.org/t/32727 for more modern patterns. [deprecation id: discourse.register-connector-class-legacy]
o @ post-placeholder.js:53
p @ topic-link.js:12
registerConnectorClass @ group.js:15
(匿名) @ topic-custom-field-initializer.js:83
e1 @ group.js:15
initialize @ topic-custom-field-initializer.js:13
(匿名) @ composer-action-title.js:62
(匿名) @ item.js:166
e.each @ form-template-validation.js:54
e.walk @ form-template-validation.js:54
e.each @ form-template-validation.js:54
e.topsort @ form-template-validation.js:54
_runInitializer @ item.js:166
runInstanceInitializers @ item.js:166
_bootSync @ composer-action-title.js:62
didBecomeReady @ index.js:93
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_ensureInstance @ client-error-handler.js:88
schedule @ client-error-handler.js:88
f @ bookmark.js:114
waitForDOMReady @ index.js:93
init @ index.js:93
_ @ caret-position.js:86
create @ caret-position.js:86
(匿名) @ start-app.js:4
(匿名) @ discourse-boot.js:13
(匿名) @ discourse-boot.js:1
post-placeholder.js:53  [PLUGIN discourse-chain-topics] Deprecation notice: Defining connector classes via registerConnectorClass is deprecated. See https://meta.discourse.org/t/32727 for more modern patterns. [deprecation id: discourse.register-connector-class-legacy]
o @ post-placeholder.js:53
p @ topic-link.js:12
registerConnectorClass @ group.js:15
(匿名) @ topic-custom-field-initializer.js:141
e1 @ group.js:15
initialize @ topic-custom-field-initializer.js:13
(匿名) @ composer-action-title.js:62
(匿名) @ item.js:166
e.each @ form-template-validation.js:54
e.walk @ form-template-validation.js:54
e.each @ form-template-validation.js:54
e.topsort @ form-template-validation.js:54
_runInitializer @ item.js:166
runInstanceInitializers @ item.js:166
_bootSync @ composer-action-title.js:62
didBecomeReady @ index.js:93
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_ensureInstance @ client-error-handler.js:88
schedule @ client-error-handler.js:88
f @ bookmark.js:114
waitForDOMReady @ index.js:93
init @ index.js:93
_ @ caret-position.js:86
create @ caret-position.js:86
(匿名) @ start-app.js:4
(匿名) @ discourse-boot.js:13
(匿名) @ discourse-boot.js:1
discourse-home-page.js:79  discourse-home-page error: invalid path ""
s @ discourse-home-page.js:79
initialize @ discourse-home-page.js:42
(匿名) @ composer-action-title.js:62
(匿名) @ item.js:166
e.each @ form-template-validation.js:54
e.walk @ form-template-validation.js:54
e.each @ form-template-validation.js:54
e.topsort @ form-template-validation.js:54
_runInitializer @ item.js:166
runInstanceInitializers @ item.js:166
_bootSync @ composer-action-title.js:62
didBecomeReady @ index.js:93
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_ensureInstance @ client-error-handler.js:88
schedule @ client-error-handler.js:88
f @ bookmark.js:114
waitForDOMReady @ index.js:93
init @ index.js:93
_ @ caret-position.js:86
create @ caret-position.js:86
(匿名) @ start-app.js:4
(匿名) @ discourse-boot.js:13
(匿名) @ discourse-boot.js:1
one-version.js:10  DEPRECATION: Components with separately resolved templates are deprecated. Migrate to either co-located js/ts + hbs files or to gjs/gts. Tried to lookup 'template:components/sidebar-theme-toggle'. [deprecation id: component-template-resolving] This will be removed in ember-source 6.0.0. See https://deprecations.emberjs.com/id/component-template-resolving for more details.
(匿名) @ one-version.js:10
(匿名) @ base.js:71
(匿名) @ deprecate.js:100
(匿名) @ base.js:71
(匿名) @ deprecate.js:100
(匿名) @ base.js:71
l @ index.js:49
(匿名) @ render-tags.js:60
(匿名) @ base.js:71
u @ index.js:49
(匿名) @ base.js:71
(匿名) @ base.js:71
(匿名) @ base.js:71
(匿名) @ bookmark.js:114
(匿名) @ base.js:71
(匿名) @ form-template-validation.js:54
(匿名) @ base.js:71
s @ post-placeholder.js:53
(匿名) @ base.js:71
r @ base.js:71
c @ deprecate.js:100
k @ upload.js:65
h @ binary.js:7
(匿名) @ theme-setting.js:6
(匿名) @ theme-setting.js:6
lookupComponent @ theme-setting.js:6
(匿名) @ theme-setting.js:6
A @ theme-setting.js:6
o @ theme-setting.js:6
(匿名) @ theme-setting.js:6
compile @ theme-setting.js:6
ef @ theme-setting.js:6
(匿名) @ theme-setting.js:6
compile @ theme-setting.js:6
compile @ backup-codes.js:33
(匿名) @ backup-codes.js:33
evaluate @ backup-codes.js:33
evaluateSyscall @ backup-codes.js:33
evaluateInner @ backup-codes.js:33
evaluateOuter @ backup-codes.js:33
next @ backup-codes.js:33
_execute @ backup-codes.js:33
execute @ backup-codes.js:33
sync @ backup-codes.js:33
(匿名) @ theme-setting.js:6
(匿名) @ theme-setting.js:6
tA @ backup-codes.js:33
_renderRoots @ theme-setting.js:6
_renderRootsTransaction @ theme-setting.js:6
_renderRoot @ theme-setting.js:6
_appendDefinition @ theme-setting.js:6
appendOutletView @ theme-setting.js:6
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_end @ client-error-handler.js:88
(匿名) @ client-error-handler.js:88
Promise.then
(匿名) @ client-error-handler.js:88
flush @ bookmark.js:114
_scheduleAutorun @ client-error-handler.js:88
_ensureInstance @ client-error-handler.js:88
schedule @ client-error-handler.js:88
f @ bookmark.js:114
waitForDOMReady @ index.js:93
init @ index.js:93
_ @ caret-position.js:86
create @ caret-position.js:86
(匿名) @ start-app.js:4
(匿名) @ discourse-boot.js:13
(匿名) @ discourse-boot.js:1
includes.js?v=116e2a6fd81c286e004e2a0afb03baa1:840 
            
            
            GET https://www.tometo.me/u/shen_hualuo/card.json 500 (Internal Server Error)
(匿名) @ includes.js?v=116e2a6fd81c286e004e2a0afb03baa1:840
send @ jquery.js:7408
ajax @ jquery.js:7408
a @ base.js:71
(匿名) @ named-references.js:49
e @ named-references.js:49
A @ base.js:71
(匿名) @ moment.js:257
(匿名) @ group.js:15
(匿名) @ named-references.js:49
e @ named-references.js:49
getAndRemove @ group.js:15
findDetails @ moment.js:257
findByUsername @ moment.js:257
_showCallback @ item.js:166
(匿名) @ topic-link.js:12
invoke @ client-error-handler.js:88
flush @ client-error-handler.js:88
flush @ client-error-handler.js:88
_end @ client-error-handler.js:88
end @ client-error-handler.js:88
_runExpiredTimers @ client-error-handler.js:88
setTimeout
setTimeout @ client-error-handler.js:88
_installTimerTimeout @ client-error-handler.js:88
_reinstallTimerTimeout @ client-error-handler.js:88
_later @ client-error-handler.js:88
later @ client-error-handler.js:88
T @ bookmark.js:114
_show @ topic-link.js:12
_showCardOnClick @ topic-link.js:12
_cardClickHandler @ topic-link.js:12
_run @ client-error-handler.js:88
_join @ client-error-handler.js:88
join @ client-error-handler.js:88
p @ bookmark.js:114
(匿名) @ bookmark.js:114

includes.js?v=116e2a…04e2a0afb03baa1:840 
 
 GET https://www.tometo.me/u/shen_hualuo.json 500 (Internal Server Error)
(匿名)	@	includes.js?v=116e2a…04e2a0afb03baa1:840
send	@	jquery.js:7408
ajax	@	jquery.js:7408
a	@	base.js:71
(匿名)	@	named-references.js:49
e	@	named-references.js:49
A	@	base.js:71
(匿名)	@	moment.js:257
(匿名)	@	group.js:15
(匿名)	@	named-references.js:49
e	@	named-references.js:49
getAndRemove	@	group.js:15
findDetails	@	moment.js:257
afterModel	@	post-placeholder.js:53
runAfterModelHook	@	topic-link.js:12
(匿名)	@	topic-link.js:12
k	@	named-references.js:49
w	@	named-references.js:49
invoke	@	client-error-handler.js:88
flush	@	client-error-handler.js:88
flush	@	client-error-handler.js:88
_end	@	client-error-handler.js:88
(匿名)	@	client-error-handler.js:88
Promise.then		
(匿名)	@	client-error-handler.js:88
flush	@	bookmark.js:114
_scheduleAutorun	@	client-error-handler.js:88
_ensureInstance	@	client-error-handler.js:88
schedule	@	client-error-handler.js:88
(匿名)	@	hashtag-autocomplete.js:158
T	@	named-references.js:49
resolve	@	topic-link.js:12
T	@	form-template-validation.js:54
getTransitionByIntent	@	topic-link.js:12
transitionByIntent	@	topic-link.js:12
doTransition	@	topic-link.js:12
transitionTo	@	topic-link.js:12
_doTransition	@	upload.js:65
transitionTo	@	binary.js:7
(匿名)	@	theme-setting.js:6
l	@	UIPlugin.js:138
click

セーフモードではなかったと思います。

このコンポーネントに問題があるようです。

topic-creator-avatar.hbr:1  [THEME 300 '最新主题摘要'] コンパイルエラー: 不明なファイル拡張子 'hbr' (discourse/connectors/topic-list-before-columns/topic-creator-avatar.hbr)
(匿名) @ topic-creator-avatar.hbr:1

これは、hbr(raw)テンプレートがサポートされなくなったためです。

そのテーマの作成者に問い合わせてください。

@manuel さんもこれに遭遇しませんでしたか?

「いいね!」 1

これらは関連しているように見えます。

Gamification がユーザーデータを変更しており、エラーが発生しているようです。

そのため、ユーザーカードが読み込まれない理由がほぼ確実に説明できます。

これらには複数の問題があり、コア Discourse ではなくアドオンに関連しているようです。

以下を削除することをお勧めします。

  • Gamification プラグイン
  • その他のブラウザエラーを引き起こしているテーマコンポーネント([THEME 300 ‘最新主题摘要’])(.hbr テンプレートの使用を避けるように書き直す必要があります)

これらの問題を解決できるまで。

Gamification エラーは Gamification Topic で報告することをお勧めします。

#officialプラグインなので、Bug カテゴリでバグを報告することもできます(ただし、gamification タグを追加するのを忘れないでください)。 :partying_face:

「いいね!」 1

それは本当です。

いずれにしても、このトピックは現在2つの問題に対処しており、おそらく2つに分けるべきです。

ユーザーカードが読み込まれないのは、おそらくGamificationの問題なので、こちらを使用してください。gamification タグを追加しました。

「いいね!」 1

(なるほど、それでトピックのメタ編集インターフェースが変わったんですね!)

はい。

Screenshot From 2025-05-13 11-54-39

これはバックアップをインストールしようとしたときでした。バックアップからリーダーボードを削除するまで、ユーザーカードとユーザーページへのアクセスに失敗しました。

編集:別の話ですが、私のスクリーンショットはライトボックスで開かないようです。アップロードは幅1693pxでしたが、690pxでしか表示されません。

「いいね!」 1

それは非常に厳格に思えます。もっと軽量な解決策はありますか?

「いいね!」 1

これは関連性があるようです。

ええ、奇妙ですね。元の画像はこちらです(読めるようにしたい人のために):slight_smile: here

そうかもしれません。この移行は、末尾に _x(xは数字)が付いたバージョン管理されたキャッシュビューを削除します。しかし、対象から漏れているテーブルはバージョン管理されていないテーブル(_xなし)です。

@sheng_hualuo Railsコンソールからこれを実行してみてください。

DiscourseGamification::LeaderboardCachedView.regenerate_all

「いいね!」 2

gamification_leaderboard_cache_1_all_time はバージョン 1 ではありませんか?

何らかの理由で命名規則が変更されたのだと思います。

いいえ、それはリーダーボードIDです。言及されたコミットのコミットメッセージにすべて説明されています。

また、正規表現 'gamification_leaderboard_cache_[0-9]+_[a-zA-Z_]+_[1-9]$' も確認してください。

「いいね!」 1

なるほど、すべて納得がいきました。バージョン管理されたバージョン((咳払い))は削除されましたが、何らかの理由で新しいバージョン((咳払い))が具体化されていません。

「いいね!」 1

完全なトレースはありませんが、ユーザーカードの gamification_score のシリアライズ中にエラーが発生していると思われます。

これらのマテリアライズドビューは一時的な性質を持つため、スコアのルックアップでシステム全体のエラーが発生するはずはなく、ビューが存在しない場合は「デフォルトスコア」にフォールバックするはずです。

マテリアライズドビューの存在チェックにバグがあります。実際には存在しないビュー(少なくとも現在の public スキーマにはない)が存在すると報告してしまうため、存在しないビューのルックアップが発生し、エラーにつながります。

ここで何が起こったかというと、マテリアライズドビューはリストアの一部として作成された backup スキーマには存在しましたが、public スキーマには存在しなかったのだと思います。backup スキーマはリストア後もしばらく保持されます。

修正のためのPRを用意しました。

「いいね!」 3