为什么RVM为不同的gemset安装重复的gem?

Chr*_*ker 7 ruby bundler rvm

所以,我为每个rails项目创建了一个单独的rvm gemset.他们都使用相同版本的红宝石1.9.3.

这导致bundle install为两个项目完全安装一组新的宝石.如果另一个项目具有与另一个gemset中安装的完全相同的gem版本,则无关紧要.我猜这是我预期的行为,但它似乎是对硬盘空间和带宽的低效使用.

我知道我可以手动将这些宝石中的一些移植到全局宝石集中,但这对我来说似乎很乏味,并且如果我的依赖关系因特定项目而改变,也容易破坏.

是否有更好的方法来组织事物,或者在已安装gem版本时使用rvm自动检测并只使用该副本?

或者我是否应该使用更好的RVM替代方案.

Mat*_*ers 5

这是设计的.Gemsets允许您完全隔离所使用的库,因此您不会在项目之间进行任何意外交互.如果你不需要隔离,你可以使用没有gemset的解释器:

rvm use 1.9.3
Run Code Online (Sandbox Code Playgroud)

如果您在所有项目中使用了一些宝石,只需切换到解释器的全局gemset:

rvm use 1.9.3@global
Run Code Online (Sandbox Code Playgroud)

gem install 常见的宝石,然后当你在宝石集中时,它们将不会再为每个项目重新安装.

尽管gemsets在带宽或高清空间方面肯定效率不高,但它们非常方便,因为您可以轻松地吹掉项目的所有依赖项,并bundle随时从头开始重新创建.它们还完全消除了偶然更改的依赖项版本.如果您不喜欢gemsets,那么正确指定版本中的版本Gemfile可以让您在没有它们的情况下获得相当大的优势.

至于替代品,rbenv是我要检查的主要产品.