从过去几个月开始,我看到为rails应用程序执行“ bundle install ”命令,gemfile中提到的源被请求两次,因为它应该只请求一次gemfile中提到的来源。
任何人都可以告诉我它为什么会发生并提出一个解决方法吗?
答案 0 :(得分:1)
事实上,捆绑器没有两次击中rubygems,或者至少不是出于同样的原因。
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
为了便于阅读,我故意缩短了网址
如果您在浏览器中输入此网址
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。因此,捆绑者需要向rubygems询问有关这3个宝石的更多信息。如果你看一下上面的第二个查询,这正是它的作用。
http://bundler.rubygems.org/api/v1/dependencies?gems=json,activesupport,builder
此过程将发生,直到所有依赖项都得到解决。这就是为什么点数可能会根据解决所有依赖关系的“迭代次数”而改变的原因。
但是,我必须承认,消息显示两次的原因仍不清楚。此外,点数(10)与查询数量不完全对应(9)......我需要对此进行更多研究。