当我使用Bundler将gem安装到项目目录时,出于某种原因,它将它们安装在Ruby版本命名空间下,即vendor/bundle/ruby/2.1.0
。
为什么Bundler有这样的行为?有没有办法阻止Bundler在Ruby版本命名空间下安装gem,而是将它们直接放入vendor/bundle
?
答案 0 :(得分:0)
Bundler这样做的原因与rubygems相同 - 不同的Ruby发行版可能没有兼容的gem。例如,具有针对1.9.3的ruby.h构建的C扩展的gem不能在2.1.0下工作,并且都不会在JRuby下运行。纯Ruby宝石应该可以工作,但是在Rubygems或Bundler中纯Ruby和Gem与原生扩展之间没有区别,因此系统保守。此外,一些宝石在其gemspecs中指定required_ruby_version
,这将其锁定到特定的Ruby版本或版本;支持这种功能需要命名空间。
虽然你可能可以通过monkeypatch来获得你想要的行为,但这不是很明智,因为针对错误的Ruby版本运行的C扩展可能会导致你的进程出现分段。