2

過去数か月以来、Rails アプリケーションに対して「bundle install」コマンドを実行すると、gemfile に記載されているソースごとに 1 回だけ要求するはずなのに、gemfile に記載されているソースが 2 回要求されることがわかりました。

なぜそれが起こっているのか、それに対する回避策を提案できる人はいますか?

4

1 に答える 1

1

実際、バンドラーは ruby​​gems を 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 の詳細について ruby​​gems に問い合わせる必要があります。上記の 2 番目のクエリを見ると、これがまさにその機能です。

http://bundler.rubygems.org/api/v1/dependencies?gems=json,activesupport,builder

このプロセスは、すべての依存関係が解決されるまで行われます。そのため、すべての依存関係を解決するための「反復」の回数に応じて、ドットの数が変わる場合があります。

ただし、メッセージが 2 回表示される理由は不明であることを認めなければなりません。さらに、ドットの数 (10) は、クエリの数 (9) と正確には一致しません... そのためには、もう少し調査する必要があります。

于 2013-02-18T11:26:56.797 に答える