최근 게이미피케이션을 활성화하기로 결정한 후, /leaderboard 라우트가 404 오류를 반환하는 문제를 즉시 마주하게 되었습니다. 백엔드에는 80만 개 이상의 점수 기록이 계산되어 있었고 권한 설정도 정상이었지만, 페이지 자체는 로드되지 않았습니다.
서버 로그를 확인해 보니 다음과 같은 내용이 표시되었습니다:
ActiveModel::MissingAttributeError (missing attribute 'admin' for User)
플러그인 코드를 살펴보다가 lib/discourse_gamification/leaderboard_cached_view.rb 파일에서 리더보드를 위해 컬럼을 가져오는 특정 .select 문자열을 사용한다는 것을 알게 되었습니다:
.select(
"users.id, users.name, users.username, users.uploaded_avatar_id, p.total_score, p.position",
)
users.admin과 users.moderator가 해당 쿼리에 포함되지 않아서, 인스턴스화된 사용자 객체에는 해당 필드가 사용 가능하지 않습니다. 직렬화 과정이나 코어 레이아웃 렌더링 중에 해당 사용자에 대한 스태프 체크가 트리거되는 것으로 보이는데(아마도?), 이로 인해 Rails가 MissingAttributeError를 발생시키고 404로 폴백 처리되는 것 같습니다.
해당 파일을 수동으로 편집하여 .select 블록에 users.admin과 users.moderator를 포함시켰습니다:
.select(
"users.id, users.name, users.username, users.uploaded_avatar_id, users.admin, users.moderator, p.total_score, p.position",
)
앱 컨테이너를 재시작한 후 리더보드가 완벽하게 로드되기 시작했습니다.
이것이 버그인 것 같은데(아마도?), 아니면 제가 무언가를 완전히 오해하거나 놓치고 있는 걸까요?
현재 사이트는 v2026.6.0-latest (47a830330f) 버전을 사용 중입니다.