所以,我为每个rails项目创建了一个单独的rvm gemset。他们都使用相同版本的ruby 1.9.3
。
这会导致bundle install
为两个项目完全安装一组新的宝石。如果另一个项目具有与另一个gemset中安装的完全相同的gem版本,则无关紧要。我猜这是对我的预期行为,但它似乎是对硬盘空间和带宽的低效使用。
我知道我可以手动将这些宝石中的一些移植到全局宝石集中,但这对我来说似乎很乏味,并且如果我的依赖关系因特定项目而发生变化也容易破坏。
是否有更好的方法来组织内容,或者在已安装gem版本时使用rvm自动检测并只使用该副本?
或者我应该使用RVM的更好的替代方案。
答案 0 :(得分:5)
这是设计的。 Gemsets允许您完全隔离所使用的库,因此您不会在项目之间进行任何意外交互。如果你不需要隔离,你可以使用没有gemset的解释器:
rvm use 1.9.3
如果您在所有项目中使用了一些宝石,只需切换到解释器的全局gemset:
rvm use 1.9.3@global
gem install
常见的宝石,然后当你在gemset中时,它们将不会再为每个项目重新安装。
尽管gemsets在带宽或高清空间方面肯定效率不高,但它们非常方便,因为您可以轻松地吹掉项目的所有依赖项,并随时从头开始重新bundle
。它们还完全消除了偶然更改的依赖项版本。如果您不喜欢gemsets,在Gemfile
中正确指定版本可以让您在没有它们的情况下获得相当远的目标。
就替代方案而言,rbenv是我要查看的主要内容。