为什么RVM在不同的gemset中安装重复的gems?

7
因此,我为我的每个Rails项目创建了一个单独的RVM gemset。它们都使用相同版本的ruby 1.9.3
这会导致bundle install为两个项目完全安装新的一组gems。它无论另一个gemset中是否安装了与其他项目中相同版本的gem。我猜这是对我的预期行为,但似乎是硬盘空间和带宽的低效使用。
我知道我可以手动将其中一些gems移动到全局gemset中,但这对我来说似乎很繁琐,并且容易在特定项目的依赖关系发生变化时出现问题。
是否有更好的组织方式,或者rvm是否可以自动检测已经安装的gem版本并只使用那个副本?
或者是否有比RVM更好的替代品应该使用?
1个回答

5
这是设计上的考虑。Gemsets可以完全隔离所使用的库,避免不同项目之间的意外干扰。如果您不需要这种隔离,可以直接使用没有gemset的解释器:
rvm use 1.9.3

如果你有一些在所有项目中都使用的宝石(gem),只需切换到解释器(interpreter)的全局宝石集(global gemset)即可。
rvm use 1.9.3@global
gem install 命令可以安装常用的 gem,这样在 gemset 中就不会重复安装了。
虽然 gemset 在带宽和硬盘空间方面并不高效,但它们非常方便,因为您随时可以轻松删除项目的所有依赖项,并重新从头开始bundle。它们还完全消除了意外更改依赖项版本的可能性。如果您不喜欢 gemset,则可以在 Gemfile 中正确指定版本来实现类似的功能。
至于替代方案,rbenv 是我推荐的主要替代方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接