過去数か月以来、Rails アプリケーションに対して「bundle install」コマンドを実行すると、gemfile に記載されているソースごとに 1 回だけ要求するはずなのに、gemfile に記載されているソースが 2 回要求されることがわかりました。
なぜそれが起こっているのか、それに対する回避策を提案できる人はいますか?
過去数か月以来、Rails アプリケーションに対して「bundle install」コマンドを実行すると、gemfile に記載されているソースごとに 1 回だけ要求するはずなのに、gemfile に記載されているソースが 2 回要求されることがわかりました。
なぜそれが起こっているのか、それに対する回避策を提案できる人はいますか?
実際、バンドラーは rubygems を 2 回ヒットすることはありません。少なくとも同じ理由ではありません。
Fetching gem metadata from https://rubygems.org/........
Fetching gem metadata from https://rubygems.org/..
「バンドルの更新」中に実行されたクエリを見ると、次のようになります。
https://rubygems.org:443
http://bundler.rubygems.org/api/v1/dependencies?gems=airbrake,aws-sdk
http://bundler.rubygems.org/api/v1/dependencies?gems=json,activesupport,builder
http://bundler.rubygems.org/api/v1/dependencies?gems=climate_control,rubinius-actor
http://bundler.rubygems.org/api/v1/dependencies?gems=term-ansicolor,gherkin
http://bundler.rubygems.org/api/v1/dependencies?gems=little-plugger,loquacious
http://bundler.rubygems.org/api/v1/dependencies?gems=bones-rcov,bones-rubyforge
http://bundler.rubygems.org/api/v1/dependencies?gems=systemu
http://bundler.rubygems.org/api/v1/dependencies?gems=restclient,spicycode-rcov
読みやすくするために、意図的に URL を短くしています
このURLをブラウザに入力すると
http://bundler.rubygems.org/api/v1/dependencies.json?gems=airbrake
お気づきかもしれませんが、デフォルトの形式はバイナリであるため、.json 拡張子を追加して json 出力を作成しました。
このようなものが表示されます
[
{
"name":"airbrake",
"number":"3.1.8",
"platform":"ruby",
"dependencies":[
["json",">= 0"],
["activesupport",">= 0"],
["builder",">= 0"]
]
},
... (content removed)
]
この応答は、airbrake gem が json、activesupport、builder に依存していることを示しています。したがって、バンドラーはこれら 3 つの gem の詳細について rubygems に問い合わせる必要があります。上記の 2 番目のクエリを見ると、これがまさにその機能です。
http://bundler.rubygems.org/api/v1/dependencies?gems=json,activesupport,builder
このプロセスは、すべての依存関係が解決されるまで行われます。そのため、すべての依存関係を解決するための「反復」の回数に応じて、ドットの数が変わる場合があります。
ただし、メッセージが 2 回表示される理由は不明であることを認めなければなりません。さらに、ドットの数 (10) は、クエリの数 (9) と正確には一致しません... そのためには、もう少し調査する必要があります。