セルフホスト版の3.xへのアップグレードに関する問題:ロールバックできません

このアップデートは失敗しており、現在、私のDiscourseフォーラム3つすべてがダウンしています。

アップグレード画面のコンソールウィンドウには何も表示されませんが、UIの他の部分はアップグレードがまだ進行中であることを示唆しています(ただし、これは私がこれまでに経験したどのアップデートよりもはるかに時間がかかっています)。

他にこれを経験している人はいますか?アップグレードを正常に完了させるためのアイデアはありますか?

「いいね!」 1

@pearsonified Railsコンポーネントのアップデートが含まれているため、これはコマンドラインからのアップデートが必要なリリースの一つです。

「いいね!」 2

ああ、それがruby 3.0のエラーとweb-push-3.0.0の問題ですか?

管理者のアップグレードWeb UIは、ユーザーが「すべてアップグレード」をクリックして完全に壊れたフォーラムで終わるのを許すのではなく、ユーザーにそれを伝えるべきです。多くのユーザーの心臓発作を避けることができます。

「いいね!」 1

わかりません。私は個人的にアップデートにGUIを一度も使用したことがなく、コマンドラインからしか行いません。そのようなエラーは見ていません。しかし、それも見ていないでしょう。

ほとんどの場合、一般的なエラーメッセージが表示された場合、特定のシナリオが特定のメッセージが表示されるほど十分に予見されていれば、代わりに回避されていたでしょう。

GUIアップデートが失敗したという「GUIアップデートを助けて」という問題は非常にまれなので、ほとんどの人は、まず git pull; ./launcher rebuild app をデフォルトのデプロイメントに対して実行することが、最初に行うべきことだと気づいていないというのは良いことだと思います。それはほとんどの場合、ここで答えになります。

しかし、GUIアップデートが失敗した場合の一般的な対処法です。

「いいね!」 3

Discourse を長年使用しています。7年くらいでしょうか。しかし、これほど壊滅的にウェブアップグレードが失敗したのは初めてです。もちろん失敗はありましたが、フォーラムは常にロールバックして古いコンテナを起動することで復旧していました。

これは一般的なエラーではなく、Ruby の問題はかなり明確です。

web-push-3.0.0 は ruby version >= 3.0 を必要としますが、
現在のバージョン 2.7.6 と互換性がありません
Docker Manager: アップグレードに失敗しました

Discourse に料金を支払っていたら、この件についてかなり大声で不満を言っていたでしょう。フォーラムを壊滅させた大きなバグがあったからではなく、バグは起こるものですが、少なくとも過去 3 日間修正されていなかったからです。現状では、一日の終わりのちょっとした興奮にすぎません。

「いいね!」 1

Dockerマネージャーの視点からすると、実行中のバージョンが書かれた時点では、将来この問題が発生することを知らなかったでしょう。フラストレーションは理解できますが、あなたが求めていることは技術的に意味をなさない可能性があります。

Discourseの有料プランを利用していれば、このプロセスはDiscourse側で管理され、あなたが見ることはありませんでした。:smiling_face:

「いいね!」 3

技術的に修正が不可能であっても、CLI経由でのアップグレードを警告するメールをユーザーに送信できます。それについて騒ぎ立ててください。ロールバックなしでフォーラムが壊れるのは悪いことです。

Discourseはオンプレミス利用のサポートも販売していませんでしたか?いずれにせよ、有料顧客ではないのであまり文句は言えませんが、3日間というのは良くありません。

「いいね!」 1

7年ぶりにこれに頼らざるを得なくなったのは幸いですが、\n\n[quote="Wingtip, post:6, topic:252941"]\nロールバックなしでフォーラムを壊すのは悪いことです。\n[/quote]\n\nこれは誤解を招く表現だと指摘させていただきます。CDCKは、ベストプラクティスとしてアップデート前のバックアップを推奨しています。メタで何度も、GUIのアップデートが失敗した場合、フォーラム管理の通常の期待の一部として、コマンドラインから再構築に頼るという注記を見てきました。彼らはロールバックなしでフォーラムを壊したわけではないので、あなたの示唆は偽りです。\n\n何時間もここで議論するつもりはありません。ただ、あなたが完全に理性的ではないと思います。

さらに、ステージング環境を経由せずに本番サーバーをアップグレードすることは、問題を引き起こすだけです。

フルスケールのコピーである必要はありません。ほとんどの場合、$5 VPSで十分です。ダウンタイムを回避し、バックアップに頼る必要性をなくしたいのであれば、これほど安価な保険はありません。

「いいね!」 1

しばらく更新されていないテスト用のDOインスタンスでこれをテストしたところ、報告どおりエラーが発生しました。

Fetching gem metadata from https://rubygems.org/.........
Fetching https://github.com/rails/sprockets
web-push-3.0.0 requires ruby version >= 3.0, which is incompatible with the
current version, 2.7.6
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:209:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:93:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:20:in `block in fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands.rb:18:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:18:in `<main>'
Spinning up 3 Unicorn worker(s) that were stopped initially

アップグレードページには現在次のように表示されています。

そして、メインサイトは500エラーになります。/logs には次のエラーが表示されます。

NoMethodError (undefined method `navigation_menu' for #<Class:0x00007fdffcb1b2f8>)
lib/wizard/builder.rb:98:in `block in build'
lib/wizard.rb:25:in `append_step'
lib/wizard/builder.rb:61:in `build'
lib/wizard.rb:110:in `requires_completion?'
lib/wizard.rb:117:in `user_requires_completion?'
app/serializers/site_serializer.rb:171:in `include_wizard_required?'
...

@pearsonified @mcdanlj あなたが受け取っていたエラーを貼り付けていただけますか?

将来のユーザーのために何かできるかどうかはわかりませんが、調査します。

それまでの間、次の手順は役立ちましたか?

「いいね!」 6

コマンドラインのアップグレードを今朝実行して、どうなるか見てみます。フォーラムはすでに18時間ダウンしています😔

「いいね!」 2

はい、CLIの再構築はうまくいきました。私はまともなSAで、フォーラムで修正を見つけましたが、@pearsonifiedのような他のフォーラムオーナーはひどく不便だったようです。18時間ものダウンタイム、ひどいですね。

ステージング環境や本番環境について話している人々は、正気ではありません。多くの非営利団体が、小さな仮想マシンでDiscourseフォーラムをホストしています。「ステージング環境でテストすべきだ」というのは、侮辱的で偽善的な返答であり、彼らのインストールを壊したことを正当化するものではありません。何もそれを正当化しません。

この素晴らしいソフトウェアが完全に無料であることを強調したいと思います。それに感謝していますし、時折のつまずきが私の気持ちを変えることはありません。

「いいね!」 2

Discourseは無料ですが、サーバー、ドメイン、そして私たちの時間は無料ではありません。

これは営利環境とは関係なく、多くの変数がある場合の単なる常識です。アップグレードをシームレスに行うために多くの作業が行われており、もしあなたがアップグレード中の大きな問題解決に無料で時間を使いたいのであれば、それはあなたの選択です。しかし、個人的には、私がホストしている非営利団体やボランティアコミュニティが、長期にわたるダウンタイムではなく、一度だけダウンタイムが発生するだけで、簡単なアップグレードが行われることを望みます。

DOの最小VPSでも、テストが代表的であればアップグレードのリスクを軽減するのに十分です。あなたがまともなSAであれば、その5ドルはコーヒー1杯の値段であり、あなたの時間単価のほんの一部です。

ステージングVMはフォーラムのデータも保持する必要があり、ホスティングコストが倍増します。いずれにせよ、それは必要ありません。これはビデオゲームフォーラムであり、多少のダウンタイム(18時間ではない!)は許容されます。最悪の場合、アップグレード前にVMのスナップショットがあったので、ロールバックするだけで済みました。

4日間も壊れたままなのは懸念事項です。ロールバックなしでアップグレードが失敗した場合は、「マジかよ、今すぐ修正しないと」という瞬間がトリガーされるべきです。それは議論の余地のある発言ではないはずです。

「いいね!」 1

私も web-push Ruby エラーが発生しました。通常のフォーラムで、カスタムプラグインはありません。

web-push-3.0.0 は ruby バージョン >= 3.0 を必要としますが、これは現在のバージョン 2.7.6 と互換性がありません。

以前にもコマンドライン経由でアップグレードする必要があると言われたことがありました。この問題を引き起こしているバージョンに関わらず、そのオプションを有効にすることは可能でしょうか?

編集:ああ、実際にそう書いてありますね!

問題は、docker_manager update を実行してから、ページをリフレッシュするのではなく、単に上のタブをクリックしてしまうことです。そのため、JS でタブを変更するだけでなく、HTTP 経由でリフレッシュするように変更することは可能でしょうか?

「いいね!」 1