NoMethodError beim Wiederherstellen von Benutzeraktionen

Hallo zusammen, ich hatte diesen Beitrag ursprünglich unter Support eingereicht, bin mir aber jetzt ziemlich sicher, dass es sich um einen Bug handelt, da ich ihn bei mehreren Neuinstallationen reproduzieren konnte. Das Problem trat bei mir erst nach dem neuesten Discourse-Release auf. Hier sind die Schritte zur Reproduktion:

  1. Führen Sie eine normale Discourse-Installation und -Einrichtung durch (ich habe denselben Fehler sowohl bei der Installation auf Ubuntu Server 18.04 LTS als auch auf Ubuntu Server 20.04 LTS erhalten).

  2. Nach Abschluss der Einrichtung gehen Sie in den Container und führen rake user_actions:rebuild aus. Sie erhalten dann diesen Fehler:

    # 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

In einigen anderen Beiträgen wurde empfohlen, bei ähnlichen Fehlern ./launcher rebuild app auszuführen. Auch nachdem ich das getan habe, erhielt ich weiterhin den NoMethodError.

Ich wäre für jeden Hinweis sehr dankbar. Vielen Dank im Voraus!

1 „Gefällt mir“

Ich sehe diesen Fehler auch. Ubuntu 19.10 wird ausgeführt.

Entschuldigung, diese Aufgabe sollte eigentlich nicht mehr existieren; sie ist seit vielen, vielen Jahren defekt.

Ich habe sie entfernt.

Das Neuaufbauen von Benutzeraktionen könnte machbar sein, ist jedoch sehr komplex, insbesondere da Plugins wie assign und solved berücksichtigt werden müssen.

4 „Gefällt mir“

Danke für die Info, @sam. Das war mir nicht bewusst. Als Info: Die Aufgabe hat vor ein paar Tagen (zumindest bei mir) problemlos funktioniert. Nach einem Import konnte ich sie erfolgreich ausführen, und sie hat die Benutzeraktionen wie erwartet neu aufgebaut.

Statt diese Aufgabe auszuführen, gibt es dann vielleicht eine bevorzugte Methode, um diese Daten neu aufzubauen (oder einen Ort, an dem sie während eines Imports zunächst gespeichert werden), damit Discourse sie korrekt nutzen kann?

Beispielsweise habe ich es geschafft, alle Vor-Discourse-Beiträge wie die Historie einzulesen und korrekt allen Feldern in der Tabelle user_action zuzuordnen. Der entscheidende Teil dabei schien der oben genannte Rake-Befehl zu sein, da er danach eine genaue Like-Historie für jeden Benutzer anzeigte (meiste Likes, erteilte Likes, erhaltene Likes usw.). Wenn der oben genannte Rake-Befehl entfernt wird, könntest du mir bitte sagen, wo in der Datenbank Benutzeraktionen gespeichert werden müssen, damit sie korrekt in Profilen und Benutzerstatistiken angezeigt werden? Werden sie einfach aggregiert und als Ganzzahlen in der Tabelle user_stats gespeichert, oder gibt es noch einen anderen Ort, an dem ein Teil davon landet?

Vielen Dank!

Unsere Importeure bieten im Allgemeinen einen Rahmen für die Durchführung solcher Aktionen während Migrationen. Ich würde den Quellcode dazu prüfen.

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

4 „Gefällt mir“

Dieses Thema wurde automatisch nach 4 Tagen geschlossen. Neue Antworten sind nicht mehr möglich.