Piena trasparenza: ho utilizzato ask.discourse per redigere questa segnalazione di bug dopo una conversazione. Inoltre, so che sono in ritardo con gli aggiornamenti, ma volevo pubblicare questo messaggio mentre era ancora fresco nella mia mente.
Sono riuscito a riprodurre il problema su due diversi account utente.
Riepilogo
La richiesta di un archivio dei dati dell’utente (Preferenze → Esporta i tuoi dati → Richiedi archivio) fallisce per gli utenti che hanno messo nei preferiti (bookmark) un report di gruppo Data Explorer. Il job in background Jobs::ExportUserArchive si blocca durante la generazione del CSV dei preferiti, quindi l’esportazione non viene mai completata e nessun link di download viene inviato.
Ambiente
- Versione Discourse: 2026.8.0-latest.1
- Data Explorer: incluso nel core (la versione segue quella del core)
- Self-hosted / gestito: self-hosted
- Stack Ruby/Rails secondo lo stack trace: activemodel/activerecord 8.0.5.1, Sidekiq 7.3.10
Passaggi per riprodurre
- Come amministratore, crea una query Data Explorer e concedi l’accesso a un gruppo.
- Nella scheda Report del gruppo, fai clic su Aggiungi ai preferiti sulla query affinché diventi un report di gruppo preferito.
- Come quello stesso utente, vai su Preferenze → Esporta i tuoi dati → Richiedi archivio.
- Osserva il fallimento del job (controlla
Amministrazione → Logo i log di Sidekiq).
Comportamento atteso
L’archivio dell’utente dovrebbe essere generato e l’utente dovrebbe ricevere il link di download, inclusi i propri preferiti.
Comportamento effettivo
Il job di esportazione genera un’eccezione e l’archivio fallisce. Lo stack trace mostra che il crash si verifica in bookmarks_export, dove il job chiama .url sull’oggetto preferito:
Job exception: undefined method 'url' for an instance of DiscourseDataExplorer::QueryGroup
Stack trace (ridotto ai frame rilevanti):
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'
Analisi
I preferiti sono polimorfici. Il job di esportazione chiama bookmarkable.url, che funziona per i tipi di preferiti nativi (Topic, Post), ma DiscourseDataExplorer::QueryGroup non implementa url, quindi il job genera NoMethodError al primo preferito di questo tipo.
Sembra che Data Explorer registri i gruppi di query come preferibili (tramite il pulsante Aggiungi ai preferiti del report di gruppo), ma il modello manca del metodo url (oppure il job di esportazione principale necessita di una guardia per i tipi di preferiti che non ne forniscono uno).
Correzione suggerita
Implementare un metodo url su DiscourseDataExplorer::QueryGroup, oppure rendere difensivo bookmarks_export del core (ad esempio, bookmarkable.respond_to?(:url) / rescue per riga) in modo che un singolo tipo di preferito non supportato non possa bloccare l’intera esportazione.
Soluzione temporanea
Eliminare i preferiti problematici (righe in bookmarks dove bookmarkable_type = 'DiscourseDataExplorer::QueryGroup' per l’utente interessato) consente all’esportazione di completarsi.