Techioz Blog

Bundler が更新またはインストールしようとすると永久にハングアップする

概要

バンドルのインストールまたはバンドルの更新を実行しようとすると、バンドラーが永続的にハングし、その機能が完了しません。完了するのは、更新する gem を指定したときだけです。

例えば:

bundle update

次のように使用しない限り、永久にハングします。

bundle update activerecord

その後は通常どおり完了します。

ご協力をいただければ幸いです。

解決策

この問題は、依存関係が欠落していること、またはさらに悪いことに、依存関係の依存関係が原因で発生します。これは、gemserver (エンタープライズ環境) として Rubygems.org を使用していない場合によく発生します。

新しい gemset を作成し、再バンドルします。これにより問題が何度も解決されます。

運用上の理由でそれができず、問題のある gem がいつ追加されたかを振り返るためのアプリ履歴がない場合は、次のようにします。

この回答を書いてから少し学んだので、詳細なデバッグ出力でバンドラーを実行する方法についてのこの優れた記事を渡したいと思いました。

export DEBUG_RESOLVER=1
bundle  2> debug_output.txt 1> stdio.txt &

これにより、すべてのデバッグ (err) 出力が debug_output.txt にダンプされ、通常の画面内容が stdio.txt にダンプされます。

バンドラーが行を 2(stderr) にダンプするたびに crlf を 1 に入れるため、1> もダンプする必要があります。そのため、1 をダンプするか、ジョブをバックグラウンドで実行します。同じ端末で作業できるように両方を実行します。

私は通常、次のようにフォローアップします。

tail stdio.txt 

物事が始まっていることを確認するには、次のようにします。

tail -n 10000 -f debug_output.txt 

/FAIL] を使用して、依存関係のインストールに失敗したファイルを検索します。同じものをいくつか見つければ、ほぼ犯人が特定されます。 stderr はバンドルのインストールまたはバンドルの更新に機能します。

(エンタープライズ) gemserver インデックスが破損していることを確認するには、この消去プロセスを使用する必要がありました。

ENV 変数の設定を解除するには、

GITHUB_TOKEN の認証情報がバンドル設定 –global github.com と一致していることを確認してください。