버전 업데이트 후, 사용자 아바타를 클릭하여 사용자 카드를 불러올 수 없었으며, 개인정보 설정으로 진입하면 페이지를 찾을 수 없다는 메시지가 표시되었습니다.
어제 업데이트를 했고, 내 경우 유저 카드는 정상적으로 로드됩니다.
안전 모드를 확인해 보세요. 안전 모드에서 문제가 없다면, 테마나 테마 컴포넌트 중 하나에 문제가 있는 것일 수 있습니다.
콘솔 오류가 있다면 알려 주실 수 있을까요?
안전 모드에서 실행 중에도 여전히 로딩이 되지 않습니다. 로그 정보를 첨부합니다.
Failed to handle exception in exception app middleware : 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 '최신 주제 요약'] 컴파일 오류: 알 수 없는 파일 확장자 '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] 비추천 공지: registerConnectorClass를 통한 커넥터 클래스 정의는 비추천됩니다. 더 현대적인 패턴에 대해서는 https://meta.discourse.org/t/32727을 참조하세요. [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] 비추천 공지: registerConnectorClass를 통한 커넥터 클래스 정의는 비추천됩니다. 더 현대적인 패턴에 대해서는 https://meta.discourse.org/t/32727을 참조하세요. [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] 비추천 공지: registerConnectorClass를 통한 커넥터 클래스 정의는 비추천됩니다. 더 현대적인 패턴에 대해서는 https://meta.discourse.org/t/32727을 참조하세요. [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 오류: 잘못된 경로 ""
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: 별도로 템플릿이 해결되는 컴포넌트는 비추천됩니다. co-located js/ts + hbs 파일 또는 gjs/gts로 마이그레이션하세요. 'template:components/sidebar-theme-toggle'를 조회하려고 했습니다. [deprecation id: component-template-resolving] 이는 ember-source 6.0.0에서 제거될 예정입니다. 자세한 내용은 https://deprecations.emberjs.com/id/component-template-resolving을 참조하세요.
(익명) @ 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
_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 '最新主题摘要'] Compile error: unknown file extension 'hbr' (discourse/connectors/topic-list-before-columns/topic-creator-avatar.hbr)
(匿名) @ topic-creator-avatar.hbr:1
hbr (raw) 템플릿은 더 이상 지원되지 않기 때문입니다.
해당 테마의 작성자에게 이 문제를 보고해 주세요.
@manuel, 이 문제도 겪으셨나요?
이것들은 서로 관련이 있어 보입니다.
Gamification 플러그인이 User 데이터를 수정하면서 에러를 발생시키고 있는 것으로 보입니다.
따라서 User Card가 로드되지 않는 이유를 거의 확실히 설명해 줍니다.
제 생각에는 여러 문제가 있으며, 이들은 Core Discourse가 아닌 애드인(add-in)과 관련이 있는 것 같습니다.
해결될 때까지 다음을 제거하는 것을 권장합니다:
- Gamification 플러그인
- 다른 브라우저 에러를 유발하는 테마 컴포넌트([THEME 300 ‘最新主题摘要’]) (이것은 .hbr 템플릿 사용을 피하도록 다시 작성되어야 합니다)
Gamification 에러는 Gamification Topic에서 보고하는 것이 좋습니다.
공식 플러그인이므로 Contribute > Bug 카테고리에서도 버그를 보고할 수 있습니다(다만 gamification 태그를 추가하는 것을 잊지 마세요). ![]()
맞습니다.
어쨌든 이 게시물은 현재 두 가지 문제를 다루고 있으므로, 둘로 나누는 것이 좋을 것 같습니다.
사용자 카드가 로드되지 않는 문제는 가장 가능성이 높은 게임화(Gamification) 관련 문제이므로, 이 게시물은 해당 문제로 사용하는 것이 좋겠습니다. gamification 태그를 추가했습니다.
(아니, 그거 때문에 혼란스러웠던 거였구나! 토픽 메타 편집 인터페이스가 바뀌었네!)
네.
![]()
백업 설치를 시도했을 때였습니다. 백업에서 리더보드를 삭제하기 전까지는 사용자 카드와 사용자 페이지에 접근할 수 없었습니다.
수정: 다른 이야기인데, 제 스크린샷이 라이트박스에서 열리지 않는 것 같습니다. 업로드된 이미지는 1693px 폭이었지만, 실제로는 690px로만 표시됩니다.
그것은 매우 가혹해 보입니다. 좀 더 가벼운 해결책이 있을지 궁금하네요.
다음은 잠재적으로 관련이 있을 수 있습니다:
네, 이상하네요. 직접 읽어볼 수 있기를 원하는 분들을 위해 원본은 여기에 있습니다 ![]()
그럴 수도 있습니다. 이 마이그레이션은 끝에 _x(여기서 x는 숫자)가 붙은 버전화된 캐시 뷰를 삭제합니다. 하지만 이 마이그레이션이 놓친 테이블은 버전화되지 않은 테이블(즉, _x가 없는 테이블)입니다.
@sheng_hualuo rails 콘솔에서 이것을 실행해 볼 수 있을까요?
DiscourseGamification::LeaderboardCachedView.regenerate_all
gamification_leaderboard_cache_1_all_time에서 1이 버전이 아닌가요?
어떤 이유로든 네이밍 규칙이 변경된 것 같습니다.
아니요, 그건 리더보드 ID입니다. 언급하신 커밋의 커밋 메시지에 모두 설명되어 있습니다.
또한, 정규식 'gamification_leaderboard_cache_[0-9]+_[a-zA-Z_]+_[1-9]$'도 확인해 보세요.
아, 이제 모든 게 이해가 됩니다. 그래서 버전이 지정된 버전(에이헴)은 폐기되었고, 하지만 새로운 버전(에이헴)은 왜인지 아직 구체화되지 않은 것이군요.
전체 트레이스를 가지고 있지는 않지만, gamification_score가 사용자 카드 직렬화(serialization) 중에 오류가 발생하는 것 같습니다.
이러한 물질화된 뷰(materialized view)의 일시적인 특성을 고려할 때, 점수 조회가 시스템 전체 오류를 일으키는 것은 예상되지 않으며, 뷰가 존재하지 않을 경우 "기본 점수"로 폴백(fallback)되어야 합니다.
물질화된 뷰 존재 여부 확인에 버그가 있습니다. 실제로 뷰가 존재하지 않는 경우에도(적어도 현재 public 스키마에서는) 뷰가 존재한다고 보고하여, 존재하지 않는 뷰에 대한 조회가 발생하고 이로 인해 오류가 납니다.
여기서 일어난 일은 다음과 같습니다. 물질화된 뷰는 복원(restore)의 일부로 생성된 backup 스키마에는 존재했지만 public 스키마에는 없었습니다. backup 스키마는 복원 후 일정 기간 동안 유지됩니다.
수정 사항을 담은 PR을 준비했습니다.