ユーザーアクションの再構築時に発生する NoMethodError

皆さんこんにちは。当初は Support に投稿しましたが、新規インストールで複数回再現したため、現在はバグであると考えています。この問題は最新の Discourse リリース後に発生し始めました。再現手順は以下の通りです。

  1. 通常の Discourse のインストールとセットアップを行います(Ubuntu Server 18.04 LTS でも 20.04 LTS でも同じエラーが発生しました)。

  2. セットアップ完了後、コンテナに入り rake user_actions:rebuild を実行すると、以下のエラーが表示されます。

    # 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

他の投稿では、同様のエラーが発生した際に ./launcher rebuild app を実行することを提案する人がいましたが、実行しても NoMethodError は解消されませんでした。

ご意見をお聞かせいただければ幸いです。よろしくお願いいたします。

「いいね!」 1

私もこのエラーを確認しています。Ubuntu 19.10 を実行しています。

申し訳ありませんが、このタスクは実際には存在すべきではありません。すでに長年にわたり機能不全となっています。

削除しました。

ユーザーアクションの再構築は可能かもしれませんが、assign や solved などのプラグインを考慮する必要があるため、非常に複雑です。

「いいね!」 4

情報をありがとうございます、@sam。気づいていませんでした。参考までに、このタスクは数日前までは(少なくとも私の場合)問題なく動作していました。インポート後、正常に実行でき、期待通りにユーザーアクションが再構築されました。

このタスクを実行する代わりに、Discourse がデータを正しく使用するために、このデータを再構築する推奨方法(またはインポート中に最初に格納する場所)はありますか?

例えば、Discourse 以前のすべての投稿履歴をインポートし、user_action テーブルのすべてのフィールドに正しくマッピングすることに成功しました。これを達成する上で重要だったのは、上記の rake コマンドを実行することで、その後、各ユーザーの正確な「いいね」履歴(最も「いいね」されたもの、与えた「いいね」、受け取った「いいね」など)が表示されるようになったことです。上記の rake コマンドが削除される場合、プロファイルやユーザー統計で正しく表示されるように、データベース内のどこにユーザーアクションを保存する必要があるか、教えていただけますでしょうか?それは単に集計されて user_stats テーブルに整数として保存されるだけなのでしょうか、それとも他の場所にも保存される部分があるのでしょうか?

ありがとうございます!

当社のインポーターは一般的に、移行中にこれを行うためのフレームワークを提供しています。それらのソースコードを確認することをお勧めします。

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

「いいね!」 4

このトピックは 4 日後に自動的に閉鎖されました。新しい返信は許可されていません。