전체 공개 이 버그 보고서는 대화 이후 ask.discourse를 사용하여 작성했습니다. 또한, 업데이트가 다소 늦었지만 머릿속에 생생할 때 바로 공유하고 싶었습니다.
두 개의 다른 사용자 계정에서 이를 재현할 수 있었습니다.
요약
데이터 탐색기(Data Explorer) 그룹 보고서를 북마크한 사용자의 경우, 사용자 데이터 아카이브 요청(환경설정 → 내 데이터 내보내기 → 아카이브 요청)이 실패합니다. Jobs::ExportUserArchive 백그라운드 작업이 북마크 CSV를 생성하는 동안 충돌하여 내보내기가 완료되지 않으며 다운로드 링크도 전송되지 않습니다.
환경
- Discourse 버전: 2026.8.0-latest.1
- Data Explorer: 코어에 번들링됨 (버전은 코어를 따름)
- 셀프 호스팅 / 호스팅됨: 셀프 호스팅
- 백트레이스 기반 Ruby/Rails 스택: activemodel/activerecord 8.0.5.1, Sidekiq 7.3.10
재현 방법
- 관리자 권한으로 Data Explorer 쿼리를 생성하고 특정 그룹에게 액세스 권한을 부여합니다.
- 해당 그룹의 Reports(리포트) 탭에서 쿼리에 대해 Bookmark(북마크) 버튼을 클릭하여 북마크된 그룹 리포트로 만듭니다.
- 해당 사용자로 로그인하여 Preferences(환경설정) → Export your data(내 데이터 내보내기) → Request archive(아카이브 요청) 로 이동합니다.
- 작업 실패를 확인합니다(
Admin → Logs또는 Sidekiq 로그 참조).
예상 동작
사용자 아카이브가 생성되어야 하며, 사용자는 북마크를 포함한 다운로드 링크를 받아야 합니다.
실제 동작
내보내기 작업에서 예외가 발생하여 아카이브 생성이 실패합니다. 백트레이스에 따르면 충돌은 bookmarks_export 내에서 발생하며, 여기서 작업이 북마크된 객체에 대해 .url을 호출합니다:
Job exception: undefined method 'url' for an instance of DiscourseDataExplorer::QueryGroup
백트레이스(관련 프레임만 발췌):
activemodel-8.0.5.1/lib/active_model/attribute_methods.rb:512:in 'ActiveModel::AttributeMethods#method_missing'
activerecord-8.0.5.1/lib/active_record/attribute_methods.rb:495:in 'ActiveRecord::AttributeMethods#method_missing'
/var/www/discourse/app/jobs/regular/export_user_archive.rb:325:in 'block in Jobs::ExportUserArchive#bookmarks_export'
activerecord-8.0.5.1/lib/active_record/relation/delegation.rb:101:in 'Array#each'
activerecord-8.0.5.1/lib/active_record/relation/delegation.rb:101:in 'ActiveRecord::Delegation#each'
/var/www/discourse/app/jobs/regular/export_user_archive.rb:319:in 'Jobs::ExportUserArchive#bookmarks_export'
/var/www/discourse/app/jobs/regular/export_user_archive.rb:170:in 'Kernel#public_send'
/var/www/discourse/app/jobs/regular/export_user_archive.rb:170:in 'block (2 levels) in Jobs::ExportUserArchive#execute'
/var/www/discourse/app/jobs/regular/export_user_archive.rb:168:in 'block in Jobs::ExportUserArchive#execute'
분석
북마크는 다형(polymorphic)입니다. 내보내기 작업은 bookmarkable.url을 호출하는데, 이는 코어 북마크 가능 유형(Topic, Post)에서는 정상 작동하지만, DiscourseDataExplorer::QueryGroup은 url을 구현하지 않으므로 해당 유형의 첫 번째 북마크에서 NoMethodError가 발생합니다.
Data Explorer가 그룹 리포트 북마크 버튼을 통해 쿼리 그룹을 북마크 가능한 대상으로 등록하는 것으로 보이지만, 모델에는 url 메서드가 없습니다(또는 코어의 내보내기 작업이 url을 제공하지 않는 북마크 가능 유형에 대한 가드가 필요합니다).
권장 수정 사항
DiscourseDataExplorer::QueryGroup에 url 메서드를 구현하거나, 코어의 bookmarks_export를 방어적으로 변경(예: bookmarkable.respond_to?(:url) / 행별 rescue)하여 지원되지 않는 단일 북마크 가능 유형이 전체 내보내기 프로세스를 중단시키지 않도록 해야 합니다.
임시 해결책
문제 있는 북마크(영향받는 사용자의 경우 bookmarks 테이블에서 bookmarkable_type = 'DiscourseDataExplorer::QueryGroup'인 행)를 삭제하면 내보내기가 완료됩니다.