Bootstrap / 再構築は、すべてを再度クローンせずに可能ですか?

DiscourseインスタンスはGFW(Great Firewall)の背後にあるため、GitにはSOCKS5プロキシを使用しています。いくつかのプラグインがインストールされているため、アプリを再構築またはブートストラップするたびに、これらのリポジトリがすべて繰り返しクローンされます。残念ながら、クローンは定期的にタイムアウトするため、最新のコードベースがすでにクローンされているにもかかわらず、プロセス全体が最初からやり直されます。40回以上の試行と約5時間の無駄を費やしました。最後の障壁は、コンテナ内のyarnサブプロセスであり、通常はタイムアウトしてアップグレードに失敗します。

アプリ.ymlを、少なくともプラグインのクローンプロセス全体を呼び出さないように構成する方法はありますか?docker-managerコードとDiscourseコードベースへのクローンは50/50の確率で、その後のクローンは成功率約1/3です。yarnサブプロセスが失敗する原因はわかりませんが、現時点では、与えられた方法でDiscourseを復旧させることは不可能のようです。

もちろん、手動でブートストラップしたかったのでlauncher destroy appを呼び出してしまったのは愚かでしたが、そのため、yarnコマンドを手動で実行するためにlauncher enter appを実行することもできません。何かアイデアはありますか?ご意見をお聞かせください。

これらの件については専門家ではありませんが、ダウンロードしているものに対するキャッシュプロキシが解決策だと思います。

web.china.template.yml がありますが、それを使用していますか?

もちろんです。すべてのRailsアプリケーションで中国語のRubyソースを使用しています。少なくともそれがあるのは嬉しいです。私が困惑しているのは、すべてのリポジトリ(プラグインのリポジトリも含む)はすでにクローンされているのに、このyarnサブプロセスが次のものを呼び出すことです。

INFO -- : cd /var/www/discourse && [ ! -d 'node_modules' ] || su discourse -c 'yarn install --production && yarn cache clean'

何らかの理由でGFW(Great Firewall)は、次々と多くのgit cloneプロセスを好まず、ある時点で接続を終了します。ランチャーを「よし、コードはここにある、クローンする必要はない…今はブートストラップだけでいい」のようなフラグで実行できればいいのですが。:grinning:

編集: 信じられない。ちょうど入力している間に、私の78回目の試行が11時間後にようやく成功しました。sshuttleに頼りましたが、それも約12回の試行がかかりましたが、何らかの理由でGFWは私の哀れな魂に慈悲をかけました。

それは、独自のキャッシュプロキシが行うこと(そう思うでしょう)です。squid をチェックしてみてください。そうすれば、ランチャーが実際のソースからではなく、ミラーからプルされることがわかります。

launcher にはコードが含まれていません。なぜなら、コードのない新しいコンテナにクローンしているからです。そのため、毎回すべてのコードをダウンロードしているのです。

はい、ある程度Squidの経験はあります。これはいずれにせよ一般的な解決策が必要なので、毎回手動でDiscourseのアップグレードに何時間も費やすことはできません。数ヶ月間は通常のSocks5プロキシでうまくいっていましたが、GFWとのいたちごっこは続いており、10月上旬からGitHubへのアクセスは困難になっています。このgitee.comサイトにクローンが大量にあるのも無理はありません。

ランチャーについての説明、ありがとうございます。私はDockerに関してはかなり疎く、Gitリポジトリをローカルにクローンしてから、それをコンテナに上書きするものだとばかり思っていました。

Squidのオプションを必ず検討します。これは、私の2番目の苦痛の源であるfonts.googleapis.comにも役立つかもしれません。

「いいね!」 1

それはgit clonesではなく、NPMパッケージレジストリからのインストールであるべきです。確かに、NPM/Yarn用のbundle config mirror.https://rubygems.org https://gems.ruby-china.com/に相当するものがあるはずです。

「いいね!」 1

その後すぐに、何かをクローンして失敗したサブプロセスが続きました。残念ながら、今はエラーログを再現できません。エラーメッセージは同じTLSハンドシェイクエラー/タイムアウトだったので、間違いなくGitHubから何かをプルしていました。しかし、今は重要ではありません。通常、npmは何らかの理由でここでは決してタイムアウトしません。GFWは長く、謎に満ちています!

「いいね!」 2

もしかしたら、それは

「いいね!」 1

ありがとうございます!まさにそれが私のアップグレードを壊していました。

「いいね!」 2

それはかなり安定していますが、今すぐNPMレジストリにプッシュすることは可能ですか @pmusaraj

「いいね!」 3

はい、ぜひそうしましょう。

「いいね!」 2

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.