NoMethodError durante la ricostituzione delle azioni utente

Ciao a tutti, inizialmente avevo inviato questa segnalazione in Support, ma ora sono abbastanza sicuro che si tratti di un bug, dato che l’ho riprodotto diverse volte su installazioni pulite. Il problema è iniziato solo dopo l’ultimo rilascio di Discourse. Ecco i passaggi per riprodurlo:

  1. Segui la normale procedura di installazione e configurazione di Discourse (ho ottenuto lo stesso errore sia installando su Ubuntu Server 18.04 LTS che su Ubuntu Server 20.04 LTS)

  2. Al termine della configurazione, accedi al contenitore ed esegui rake user_actions:rebuild; otterrai questo errore:

    # rake user_actions:rebuild --trace
    ** Invoke user_actions:rebuild (first_time)
    ** Invoke environment (first_time)
    ** Execute environment
    ** Execute user_actions:rebuild
    rake aborted!
    NoMethodError: undefined method `log_topic' for UserActionManager:Class
    /var/www/discourse/lib/tasks/user_actions.rake:14:in `block (2 levels) in <top (required)>'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/relation/delegation.rb:85:in `each'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/relation/delegation.rb:85:in `each'
    /var/www/discourse/lib/tasks/user_actions.rake:14:in `block in <top (required)>'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `block in execute'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `each'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `execute'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
    /usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:188:in `invoke'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:160:in `invoke_task'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block (2 levels) in top_level'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `each'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block in top_level'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:125:in `run_with_threads'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:110:in `top_level'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:83:in `block in run'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:80:in `run'
    bin/rake:13:in `<top (required)>'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
    /usr/local/bin/bundle:23:in `load'
    /usr/local/bin/bundle:23:in `<main>'
    Tasks: TOP => user_actions:rebuild

Ho visto in alcuni altri post che alcuni suggerivano di eseguire ./launcher rebuild app quando si verificano errori simili, ma dopo averlo fatto, ho comunque ricevuto l’errore NoMethodError.

Qualsiasi suggerimento sarebbe molto apprezzato. Grazie in anticipo!

1 Mi Piace

Vedo anch’io questo errore. Sto eseguendo Ubuntu 19.10.

Mi dispiace, questa attività non dovrebbe più esistere, è rotta da moltissimi anni.

L’ho rimossa.

Ricostruire le azioni degli utenti potrebbe essere fattibile, ma è molto complesso, specialmente perché bisogna considerare plugin come assign e solved.

4 Mi Piace

Grazie per le informazioni, @sam. Non me ne ero reso conto. Per tua informazione, il task ha funzionato correttamente solo pochi giorni fa (almeno per me) senza problemi. Dopo un’importazione, sono riuscito a eseguirlo con successo e ha ricostruito le azioni degli utenti come previsto.

Invece di eseguire questo task, esiste un metodo preferito per ricostruire questi dati (o un luogo dove memorizzarli inizialmente durante un’importazione) affinché i dati siano utilizzati correttamente da Discourse?

Ad esempio, sono riuscito a importare tutti i post precedenti a Discourse, come la cronologia, e a mapparli correttamente su tutti i campi della tabella user_action. La parte fondamentale per raggiungere questo obiettivo sembrava essere l’esecuzione del comando rake sopra menzionato, poiché mostrava poi una cronologia dei like accurata per ogni utente (più like ricevuti, like inviati, ricevuti, ecc.). Se il comando rake sopra verrà rimosso, ti dispiacerebbe indicarmi la direzione giusta su dove, altrimenti nel database, le azioni degli utenti devono essere memorizzate per essere visualizzate correttamente nei profili e nelle statistiche degli utenti? Viene solo elaborato e salvato nella tabella user_stats come interi o c’è un altro posto dove va una parte di questi dati?

Grazie!

I nostri script di importazione offrono in generale un framework per farlo durante le migrazioni. Ti consiglio di esaminarne il codice sorgente.

discourse/script/import_scripts at main · discourse/discourse · GitHub

4 Mi Piace

Questo argomento è stato automaticamente chiuso dopo 4 giorni. Non sono più consentite nuove risposte.