NoMethodError ao reconstruir ações do usuário

Olá a todos, então eu originalmente submeti isso em Support, mas tenho quase certeza de que agora é um bug, já que o reproduzi várias vezes em instalações limpas. Só comecei a experimentar isso após o último lançamento do Discourse. Aqui estão os passos para reproduzir:

  1. Siga o processo normal de instalação e configuração do Discourse (obtive o mesmo erro ao instalar no Ubuntu Server 18.04 LTS e também no Ubuntu Server 20.04 LTS)

  2. Após concluir a configuração, acesse o contêiner e execute rake user_actions:rebuild; você receberá este erro:

    # 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 em alguns outros posts que pessoas sugeriram executar ./launcher rebuild app ao receber erros semelhantes, mas após fazer isso, ainda recebi o NoMethodError.

Qualquer sugestão seria muito apreciada. Obrigado antecipadamente!

1 curtida

Eu também estou vendo esse erro. Estou executando o Ubuntu 19.10.

Desculpe, essa tarefa realmente não deveria mais existir; ela está quebrada há muitos e muitos anos.

Eu a removi.

Reconstruir as ações do usuário pode ser viável, mas é muito complexo, especialmente porque é necessário considerar plugins como assign e solved.

4 curtidas

Obrigado pela informação, @sam. Eu não tinha percebido isso. Só para registrar, a tarefa funcionou corretamente há alguns dias (pelo menos para mim), sem problemas. Após uma importação, consegui executá-la com sucesso e ela reconstruiu as ações dos usuários conforme o esperado.

Em vez de executar essa tarefa, existe uma maneira preferencial de reconstruir esses dados (ou um local para armazená-los inicialmente durante uma importação) para que os dados sejam utilizados corretamente pelo Discourse?

Por exemplo, consegui importar todo o histórico de posts anteriores ao Discourse e mapeá-los corretamente para todos os campos na tabela user_action. A parte mais importante para conseguir isso pareceu ser executar o comando rake mencionado acima, pois então ele mostrou um histórico de curtidas preciso para cada usuário (mais curtidas, curtidas dadas, recebidas, etc.). Se o comando rake acima for removido, você se importa em me indicar o caminho certo sobre onde mais, no banco de dados, as ações dos usuários precisam ser armazenadas para que apareçam corretamente nos perfis e nas estatísticas dos usuários? Os dados são apenas consolidados e salvos na tabela user_stats como inteiros, ou há outro local onde parte disso é armazenada?

Obrigado!

Nossos importadores, em geral, oferecem um framework para fazer isso durante as migrações. Eu revisaria o código-fonte deles.

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

4 curtidas

Este tópico foi automaticamente fechado após 4 dias. Novas respostas não são mais permitidas.