2011-04-28 32 views
7

我不确定这两个工具之间有什么不同。似乎有很大的重叠,但我一直在使用RVM并面临一些未解决兼容性问题。Bundler提供什么RVM?

Bundler做了哪些RVM不能做的事情?

回答

11

他们服务于不同的目的。 RVM创建一个沙箱来管理你的Ruby安装。作为其中的一部分,它也可以让你定义gemsets。

Bundler不管理你的Rubies,它与当前选定的Ruby一起工作。

所以,我觉得你应该考虑RVM作为开发环境配置管理器,并捆绑宝石经理的应用程序。


编辑:更多的想法 -

无论我们使用RVM与否,通常我们不得不来加载所有我们要使用手动应用程序的宝石,使用gem install blah为每我们想用的宝石。

我最终通过手动管理我的宝石跨多个红宝石。安装完成后,我可以使用RVM创建gemset,但如果没有安装gemm,RVM将不会自动检索gem的特定版本,或者如果它被删除,则再次获取它。由于RVM更关心Ruby环境,因此它主要将宝石版本设置为gem和我们。

捆扎机,在另一方面,确实有关RVM那些缺失的部分护理。当您为捆绑器创建Gemfile时,它将检索必要的宝石和指定的特定版本。因此,在另一台机器上安装Ruby应用程序的任务变得更加简单。将文件推送到另一台机器上,然后运行bundle install,剩下的就完成了。

它与Rails很好地协作,并且是我的生产文件的合理解决方案。这比我为了在同一主机上运行Perl应用程序而必须处理Perl发行版要简单得多。

+0

+1,没错,你无法在没有捆绑器的情况下启动你的Rails应用程序,所以我不确定你最近没有它。作为参考,您可以为每个ruby虚拟机添加捆绑器到您的全局gemset,然后每个虚拟机只安装一次。 – 2011-04-29 01:31:30

+0

如果你更深入地解释Bundler的功能,以及如何补充或与RVM的gemsets作战,这将对我有所帮助。 – Phrogz 2011-04-29 01:50:24

+0

@Phrogz,[基本原理](http://gembundler.com/rationale.html)页面是一个很好的概述。我认为它对于生产代码非常方便,特别是当它需要在多台机器上时。与传统上我不必管理所有宝石相比,Gemfile和bundler会一直这样做,只是它适用于Rails应用程序。我不在工作中使用Rails,但是生成实用程序脚本,所以这会很好地工作。 – 2011-04-29 07:14:08

2

捆绑器代码中的管理依赖的工具 - 即,所有它需要的宝石。它将确保您在Gemfile中指定的所有宝石以及任何依赖项都安装在您的系统上。它并不关心你使用的是哪个版本的ruby,它只是在使用哪个解释器的情况下为你安装宝石。

RVM是运行多个红宝石的工具,从理论上讲,多gemsets为好。它根本不处理依赖关系 - 安装这些gem仍然取决于你。

我的经验(我是RVM的新手)是,除非你需要运行多个ruby,或者需要为不同的项目安装gem,否则它们之间会产生冲突,所以你不想打扰RVM 。即使你使用的是RVM,使用Bundler来管理gem依赖也是有意义的,这样你的Gemfile可以在你使用的任何代码库中进行跟踪。

+1

即使您只运行一个版本的ruby,RVM也可以非常方便地检查您要推向世界的代码的依赖关系。开发依赖于宝石将是一个很好的例子,从发布之前的测试中受益。 – 2011-04-29 11:24:04

+0

是的,这是一个很好的观点,我会牢记这一点。 – muffinista 2011-04-29 15:38:47

3

RVM更像是一个收容单元。虽然Bundler就像应用程序在生命周期中需要或使用的清单(依赖管理器)(除其他外)。

如果你在Rails的工作,你将无法逃脱捆扎机。但是我一直都在使用它,所以我知道我需要什么宝石,其他人以后也会参与这个项目。

RVM帮助我单独拿出我的红宝石,然后再进入红宝石/项目。这样我就没有一堆宝石和不同的版本。

不完全是最动态的答案,但希望它有一点帮助。

3

直接回答你的问题......

是什么捆扎机做RVM不 不是?

Bunlder将安装项目所需的所有宝石(使用捆绑器,并在Gemfile中指定所有需要的宝石)。 RVM不会这样做。

使用Gemfile中,你可以指定哪些宝石组(即:开发,测试)...

还有像这些是捆绑做,但RVM没有很多“小”事。一般来说,正如上面的好人所解释的那样,RVM与bundler有着不同的目标。有关管理ruby运行时的RVM,而bundler则是关于管理应用程序的相关gem。

相关问题