0

私が働いている場所では、内部使用のためにいくつかの Ruby Gem を開発しています。それらはすべて、独自の内部 gem と RubyGems.org からのサードパーティの gem の両方のさまざまな組み合わせに依存しています。

Gem としてパッケージ化して内部リポジトリに保存するビルド サーバー (ElectricCommander) を使用して変更を加えると、自動的に Gem をビルドします。そのプロセスの一環として、実行しますbundle package --all。これは、先週まですべての宝石で問題なく機能していました。

先週、gem の 1 つがバンドル パッケージ コマンドの実行に 1 時間以上かかり始めました。正常に実行されますが、完了するまでに 1 時間以上かかります。これは少しばかげています。

私たちの他の gem ビルドでは、bundle package コマンドはかなりの数分で問題なく実行されます。各 gem に含まれる依存関係の量に大きな違いはありません。それらはすべて同じ環境でビルドされます。

私たちはこれに髪を引っ張っています。Google で検索しても、同じ問題を抱えている人は見つかりませんでした。誰かがこの問題を経験したことがありますか、それとも何が原因であるか知っていますか?

4

2 に答える 2

2

問題の宝石が、多くのバージョンと他の多くの依存関係を持つ別の宝石に依存していたときに、以前に同様の問題がありました。私たちのgemでは、特定のバージョンに依存することなく、依存関係として他のgem(レールでした)がありました。

したがって、次のことがありました。

s.add_runtime_dependency "rails"

バージョンを追加すると、バンドル速度が大幅に向上しました。

s.add_runtime_dependency "rails", "~>3.2"

完全に固定されたバージョンでは、さらに高速になりました。

s.add_runtime_dependency "rails", "3.2.14"

遅い理由は、gemspec の依存関係に一致するすべてのバージョンの gem のすべての依存関係を調べるためだと思います。ご想像のとおり、しばらく前から存在し、それ自体に他の多くの依存関係がある gem を使用すると、かなりの量の参照が必要になる可能性があります。

于 2013-07-30T21:10:16.483 に答える