2

自从过去几个月以来,我看到为 Rails 应用程序执行“捆绑安装”命令,gemfile 中提到的源被请求两次,而它应该只请求 gemfile 中提到的每个源一次。

谁能告诉我为什么会这样并建议解决方法?

4

1 回答 1

1

事实上,bundler 不会两次命中 ruby​​gems,或者至少不是出于相同的原因。

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。因此,bundler 需要向 ruby​​gems 询问有关这 3 个 gem 的更多信息。如果您查看上面的第二个查询,这正是它的作用。

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

此过程将一直进行,直到解决所有依赖项。这就是为什么点的数量可能会根据解决所有依赖关系的“迭代”次数而改变。

但是,我必须承认,消息显示两次的原因仍不清楚。此外,点数(10)与查询数(9)并不完全对应……我需要对此进行更多调查。

于 2013-02-18T11:26:56.797 回答