Discourse_docker: ランチャーのブートストラップに失敗しました(回避策が含まれています)

新しいコンテナイメージのブートストラップが失敗します。数日前までは正常に動作しており、「変更点はない」のに、今日は失敗します。ログ:

[0:02:27] 処理中:
[0:02:27]   v8
________ '/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/libv8-8.4.255.0/vendor' で 'vpython third_party/depot_tools/update_depot_tools_toggle.py --disable' を実行中
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/libv8-8.4.255.0/vendor/depot_tools/.cipd_bin/.cipd/pkgs/0/fI6WggdkRyN1r91MnTeApc2_gyTtXfYpueHZVLcaF8gC/vpython:
オプションの解決に失敗しました: Python スクリプトの解決に失敗しました: stat
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/libv8-8.4.255.0/vendor/third_party/depot_tools/update_depot_tools_toggle.py:
そのようなファイルまたはディレクトリはありません
エラー: コマンド 'vpython third_party/depot_tools/update_depot_tools_toggle.py --disable' が、/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/libv8-8.4.255.0/vendor 内で非ゼロの終了ステータス 1 を返しました

...

** ブートストラップに失敗しました ** 上記をスクロールして、より早いエラーメッセージを探してください。複数のエラーがある可能性があります。
./discourse-doctor で問題の診断ができるかもしれません。

調査結果:libv8 については、Ruby ビルダーのバージョン変更に関連する同様の問題が GitHub で既に報告されています。ブートストラップ中はビルダーのアップグレードが実行されます。問題はおそらく、昨日リリースされた bundler のバージョン 2.2.15 に関連していると思われます。正直なところ、私は Ruby 専門家ではないので、実際の問題が少し異なる可能性もあります。

しかし、以下の回避策で私の環境では動作しました:templates/web.template.yml の 148 行目を以下のように変更します。

- gem update bundler

から

- gem install bundler -v 2.2.14

よろしくお願いいたします、

Michael

これは安定ブランチでのビルドを試みている時のことでしたか?

いい着眼点です!discourse_docker の master ブランチ、app.yml のパラメータ:version: stable

stable を実行する理由があり、この問題のような特定の点に注意を払う用意がある場合を除き、tests-passed の方が良いでしょう。こちらはより十分にテストされており、Discourse がホスティングで採用しているバージョンです。

これは確かにデバッグの価値があります。Bundler が直近でバグをリリースした場合、すぐに回避策を講じる必要があります。

@kris.kotlarek さん、Digital Ocean 上でこの問題を再現できますか?

ここにはいくつかの問題が絡み合っています。現時点では、stable ブランチの Gemfile のバージョンを上げるのが最も円滑な解決策です。詳細についてはコミットメッセージをご覧ください。

@m.abi さん、再度ビルドを試してみてください。これで動作するはずです。

stable で動作する環境は、より多くの安定性(理想的にはセキュリティ修正のみ)が得られると期待しています。少なくとも、それが私たちが「stable ブランチ」と解釈しているところです。また、bleeding edge よりも stable の方が頻繁に壊れる可能性があるため、より注意を払う必要があるということではありません。

さて、この事例が示す通り、状況はあなたが予想するほど単純ではありません。彼らは(このケースのように)問題を迅速に修正する良い仕事をしていますが、(主に)自社のホスティングで stable を提供していないため、tests-passed よりも十分にテストされていないと言えます。したがって、新しい stable リリース直後を除けば、私は tests-passed の方がやや「安全」な選択だと考えています。全員が同意するわけではありませんが。

@david ビルドが動作しました!ありがとうございます!