完全な開示: このバグレポートは、会話の後で ask.discourse を使用して作成しました。また、アップデートが追いついていないことは承知していますが、記憶が新しいうちに投稿したかったためです。
2つの異なるユーザーアカウントでこの問題を再現することができました。
サマリー
ユーザーデータアーカイブの要求(設定 → データのエクスポート → アーカイブをリクエスト)は、Data Explorer のグループレポートをブックマークしているユーザーに対して失敗します。Jobs::ExportUserArchive バックグラウンドジョブは Bookmarks 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 をクリックし、それがブックマークされたグループレポートになるようにします。
- その同じユーザーとして、設定 → データのエクスポート → アーカイブをリクエスト に移動します。
- ジョブの失敗を確認します(
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 がクエリグループをブックマーク可能として登録しているようです(グループレポートの Bookmark ボタン経由で)、しかしモデルには url メソッドがありません(あるいは、コアのエクスポートジョブには、それを提供しないブックマーク可能タイプに対するガードが必要です)。
修正提案
DiscourseDataExplorer::QueryGroup に url メソッドを実装するか、コアの bookmarks_export を防御的に変更する(例: bookmarkable.respond_to?(:url) / 行ごとに rescue)ことで、サポートされていない単一のブックマーク可能タイプがエクスポート全体を停止できないようにしてください。
回避策
問題のあるブックマーク(影響を受けるユーザーの bookmarks テーブル内の bookmarkable_type = 'DiscourseDataExplorer::QueryGroup' の行)を削除すると、エクスポートが完了するようになります。