Discourse v3.0.6 から v3.1.1 へのアップグレードエラー - Bookmark:Class の register_bookmarkable が未定義

こんにちは。

Discourse のインストールをイメージタグ 3.0.6 から 3.1.1 にアップグレードしようとしていますが、以下の問題が発生しています。Kubernetes クラスターで Bitnami Helm Chart を使用している、サポートされていないインストール方法であることは承知していますが、解決方法が全くわかりません。

以下のエラーは、標準の Bitnami Discourse インストール(追加のプラグインなし)から最新バージョンにアップグレードしようとしたときに表示されます。フォーラムでこの投稿を見つけました - Upgrade failed (NoMethodError: undefined method `register_bookmarkable' for Bookmark:Class) - しかし、これは上記で述べたようにデフォルトの Bitnami Discourse インストールにインストールされていない discourse-data-explorer plugin について言及しています。

どなたか助けていただけますか?

よろしくお願いします。

スティーブ

discourse 07:39:04.07 INFO  ==> Running database migrations
rake aborted!
NoMethodError: undefined method `register_bookmarkable' for Bookmark:Class
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.5.1/lib/active_record/dynamic_matchers.rb:22:in `method_missing'
/opt/bitnami/discourse/plugins/chat/plugin.rb:261:in `block (2 levels) in activate!'
/opt/bitnami/discourse/lib/plugin/instance.rb:1351:in `reloadable_patch'
/opt/bitnami/discourse/plugins/chat/plugin.rb:250:in `block in activate!'
/opt/bitnami/discourse/lib/plugin/instance.rb:526:in `block in notify_after_initialize'
/opt/bitnami/discourse/lib/plugin/instance.rb:524:in `each'
/opt/bitnami/discourse/lib/plugin/instance.rb:524:in `notify_after_initialize'
/opt/bitnami/discourse/config/application.rb:230:in `each'
/opt/bitnami/discourse/config/application.rb:230:in `block (2 levels) in <class:Application>'
/opt/bitnami/discourse/lib/plugin.rb:6:in `initialization_guard'
/opt/bitnami/discourse/config/application.rb:230:in `block in <class:Application>'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5.1/lib/active_support/lazy_load_hooks.rb:92:in `block in execute_hook'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5.1/lib/active_support/lazy_load_hooks.rb:85:in `with_execution_control'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5.1/lib/active_support/lazy_load_hooks.rb:90:in `execute_hook'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5.1/lib/active_support/lazy_load_hooks.rb:76:in `block in run_load_hooks'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5.1/lib/active_support/lazy_load_hooks.rb:75:in `each'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5.1/lib/active_support/lazy_load_hooks.rb:75:in `run_load_hooks'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/application/finisher.rb:87:in `block in <module:Finisher>'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/initializable.rb:32:in `instance_exec'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/initializable.rb:32:in `run'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/initializable.rb:61:in `block in run_initializers'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/initializable.rb:60:in `run_initializers'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/application.rb:372:in `initialize!'
/opt/bitnami/discourse/config/environment.rb:7:in `<main>'
internal:/opt/bitnami/ruby/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb:38:in `require'
internal:/opt/bitnami/ruby/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb:38:in `require'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/zeitwerk-2.6.10/lib/zeitwerk/kernel.rb:38:in `require'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/application.rb:348:in `require_environment!'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/application.rb:506:in `block in run_tasks_blocks'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/opt/bitnami/ruby/bin/bundle:25:in `load'
/opt/bitnami/ruby/bin/bundle:25:in `<main>'

これがウェブベースのアップデートだった場合、最初の手段はコマンドラインからのアップグレードでしょう。ホストにSSHで接続し、以下を実行します。

cd /var/discourse
git pull
./launcher rebuild app

(設定ファイルがapp.ymlと呼ばれていると仮定します)

編集:ただし、インストール場所は/opt/bitnami/discourseの可能性が高いようです。このような違いが「unsupported-install」タグにつながり、サプライヤーに連絡するようアドバイスされる理由です。

「いいね!」 1

@Ed_Sさん、ありがとうございます。手動アップグレードを試してみます。

Bitnamiにサポートチケットを依頼したところ、アセット、この場合はDiscourseイメージに問題があるとのことでした。BitnamiとDiscourseチーム間のテストで、BitnamiのHelm Chartのバージョン間のアップグレードがテストされ、発生する可能性のある問題が解決されているはずなので、もう一度確認してもらえないか尋ねました。

「いいね!」 2

BitnamiはDiscourseチームとは連携していないと思います。

もし彼らが対応できず、予算があるなら私に連絡してください。おそらく動作するイメージを構築できます。

「いいね!」 1

@pfaffman 様、ありがとうございます。

質問ですが、表示されているエラーは公式サポートされているプラグインであるChatプラグインからのもののように思えます。これは、Discourseチームがエラーを確認する上で何か違いがありますか?

一度無効にしてからアップグレードを試してみます。それでどうなるか見てみます。

Bitnamiのインストールでは、バージョンと更新されたプラグインとの間に互換性の問題が生じることがあります。

標準のインストールに移行できれば、より簡単に問題を解決できる可能性があります(また、より多くの人からサポートを得られるようになります)。

「いいね!」 1

チャットプラグインが含まれています。チャットプラグインもインストールしている場合(しばらく別だったと思いますか?)は、それが問題である可能性があります。

「いいね!」 1

その通りです。当初は別のプラグインでしたが、その後コアにバンドルされたため、別途インストールする必要はなくなりました。

@JammyDodger さん、ありがとうございます。

Chatプラグインが問題かどうかをテストするために、起動時にコアプラグインを無効にする方法はありますか?

Bitnamiチャートでは、プラグインのリストを渡すことができ、提供する各プラグインに対して RAILS_ENV=production bundle exec rake plugin:install repo={{ $plugin }} コマンドを実行しますが、これはコアプラグインの上に追加されると思います。

標準のインストールをもう一度確認します。KubernetesクラスターでHelmチャートを使用してすべてのサードパーティアプリケーションをデプロイしていますが、KubernetesとHelmのサポートがまだ先であれば、Discourseの例外を設けることが理にかなっているかもしれません。

簡単なアップデートですが、3.0.0 より前のバージョンからアップグレードを実行すると、アップグレードが機能するようです。つまり、2.8.11 → 3.0.6 → 3.1.1 です。

これが純粋な偶然なのかどうかはわかりませんが、3.0.6 から直接 3.1.1 にアップグレードしようとしても機能しません。

興味深いことに、このアップグレード パスを実行した後、Chat プラグインが Discourse デプロイメントに表示されなくなります。コア製品の一部ではなく、外部プラグインとして引き続き扱われていると考えられます。

Chat プラグインがこのアップグレード パスで正しいのか、それとも存在しないことが非常に間違っているのか、誰か知っていますか?

有効にしましたか?

管理者 → 設定:

image

これはまだプラグインですが、コアに含まれているため、有効にする方法は少し異なります。

インストールを再確認しますが、フラグすら見えません。

このアップグレードでサーバー上にプラグインコードも見えなくなりました。v3.0.6から始めれば確かにあったのですが、すべて再確認します。

公式リポジトリをクローンしている場合、含まれています。stable ブランチの現在の内容は次のとおりです: discourse/plugins/chat at stable · discourse/discourse · GitHub

@merefield - 確認したところ、バージョン 2.8.11 から 3.0.6 にアップグレードすると、Chat プラグインが利用できなくなります。

前述の通り、Discourse のデプロイには Bitnami Helm チャートを使用しており、これはサポートされていないことは承知していますが、興味深いのは、バージョン 3.0.6 から開始すると Chat プラグインが存在することです。

チャットプラグインを更新前に app.yml から削除しましたか? 削除すべきです。

Chat プラグインは何もしていませんが、Bitnami が Discourse イメージのバージョンを構築するために使用するスクリプトが影響を与えていないとは言えません。

こちらは Bitnami Discourse リポジトリ - containers/bitnami/discourse at main · bitnami/containers · GitHub で、Docker イメージの構築方法はこちらです - https://github.com/bitnami/containers/blob/main/bitnami/discourse/3/debian-11/Dockerfile

私の提案は?バックアップをダンプして標準インストールに移行するだけです。

@stevejr 同じ状況に陥っています。最終的にアップグレードを完了することはできましたか?ご提案いただいたように、2.8からアップグレードプロセスを試すことができません。

残念ながら、そうではありません。アップグレードは実行しておらず、Bitnamiからの応答は、バックアップを実行してから完全にクリーンなインストールを行い、その後復元することでした。

本番環境に影響を与えたくないため、これを完全にテストする必要があります。

クリーンインストールしてからバックアップから復元するというアプローチのバリエーションを試しましたが、データベースの移行にバグがあるようで失敗します。これらの試みは、リセットが容易な独立した開発デプロイメントで行われました。たとえば、復元ログには次のように表示されます。

...
[2024-02-21 12:43:12] ALTER TABLE
[2024-02-21 12:43:12] データベースを移行中...
[2024-02-21 12:43:16] 例外: /opt/bitnami/discourse/lib/discourse.rb:138:in `exec': データベースの移行に失敗しました。
rake aborted!
StandardError: エラーが発生しました。このマイグレーションおよびそれ以降のすべてのマイグレーションはキャンセルされました:

PG::DuplicateTable: エラー:  relation "sidebar_sections" already exists
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.1.0/lib/patches/db/pg.rb:110:in `exec'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.1.0/lib/patches/db/pg.rb:110:in `async_exec'
...