NoMethodError al reconstruir las acciones del usuario

Hola a todos, originalmente envié esto en Support, pero ahora estoy bastante seguro de que es un error después de reproducirlo varias veces en instalaciones limpias. Solo comencé a experimentar esto después de la última versión de Discourse. Aquí están los pasos para reproducirlo:

  1. Realiza la instalación y configuración normal de Discourse (obtuve el mismo error al instalar en Ubuntu Server 18.04 LTS y en Ubuntu Server 20.04 LTS).

  2. Una vez completada la configuración, entra al contenedor y ejecuta rake user_actions:rebuild; obtendrás este error:

    # 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

Vi en otros hilos que algunas personas sugerían ejecutar ./launcher rebuild app al obtener errores similares, pero después de hacerlo, seguí recibiendo el NoMethodError.

Cualquier sugerencia sería muy apreciada. ¡Gracias de antemano!

1 me gusta

También estoy viendo este error. Ejecutando Ubuntu 19.10.

Lo siento, esta tarea realmente ya no debería existir; ha estado rota durante muchos, muchos años.

La he eliminado.

Reconstruir las acciones de los usuarios podría ser factible, pero es muy complejo, especialmente porque hay que tener en cuenta complementos como assign y solved.

4 Me gusta

Gracias por la información, @sam. No lo había sabido. Por cierto, la tarea funcionó sin problemas hace solo unos días (al menos para mí). Después de una importación, pude ejecutarla correctamente y reconstruyó las acciones de los usuarios como se esperaba.

En lugar de ejecutar esa tarea, ¿hay una forma preferida de reconstruir estos datos (o un lugar para almacenarlos inicialmente durante una importación) para que Discourse los utilice correctamente?

Por ejemplo, he logrado importar todo el historial de publicaciones anteriores a Discourse y mapearlo correctamente a todos los campos de la tabla user_action. La parte clave para lograr esto parecía ser ejecutar el comando rake mencionado, ya que luego mostraba un historial de «me gusta» preciso para cada usuario (más «me gusta», «me gusta» dados, recibidos, etc.). Si el comando rake mencionado será eliminado, ¿podrías indicarme la dirección correcta sobre dónde más en la base de datos deben almacenarse las acciones de los usuarios para que se muestren correctamente en los perfiles y estadísticas de los usuarios? ¿Solo se comprime y guarda en la tabla user_stats como enteros, o hay otro lugar donde se almacena parte de esta información?

¡Gracias!

Nuestros importadores, en general, ofrecen un marco para realizar esto durante las migraciones. Te recomendaría revisar el código fuente de los mismos.

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

4 Me gusta

Este tema se cerró automáticamente después de 4 días. Ya no se permiten nuevas respuestas.