bundler vs RVM vs gems vs RubyGems vs gemsets vs system ruby

时间:2013-03-23 11:27:58

标签: ruby rubygems gem rvm bundler

我是Ruby的新手,并试图围绕以下概念:Bundler vs RVM vs gems vs RubyGems vs gemsets vs system rub。我很困惑。

有人可以描述一下“最佳实践”,了解如何在全新安装最新版本的Ubuntu时管理所有这些内容吗?我应该安装什么,以及如何使用它?

我猜不建议做sudo apt-get install ruby,但我不确定。除了“所有其他Ruby东西”之外,我在我的系统上尝试过它。这只会增加我的困惑。我不是在谈论Rails,而只是常规的Ruby宝石(例如Vagrant,Chef,脚本)。

2 个答案:

答案 0 :(得分:162)

根据之前的回答,这涉及到很多内容,因此请考虑这是一个简短的介绍。

gems 是打包Ruby库的方式。他们对Ruby来说是Java的罐子。在gem文件中,您可以找到Ruby代码(.rb文件),还可以找到测试,以及一个特殊文件,提供有关gem本身的信息,例如名称,依赖项和版本(gemspec)。任何Ruby项目都可以通过只需要声明依赖项的Gemfile来定义它所需的gem。 Rubygems 是包管理器的名称 - 用于安装包的工具(而gems是包本身)。 Rubygems现在是Ruby的一部分。

Bundler 是管理宝石可以忍受的原因。根据您的Gemfile,使用bundle install简单调用bundler将下载并安装所有必需的gem。使用标准gem命令,您必须使用gem install <gem_name>手动安装每个命令。 Bundler不是Ruby的一部分(它本身是packaged as a gem),但它对于大多数应用程序来说都是“事实上的标准”(你不会发现许多人没有使用它,并且没有充分的理由不使用它,实际上)

RVM 是一个工具,允许您在计算机上安装多个版本的Ruby,并在需要时在它们之间切换。这可用于安装Ruby 1.8和1.9,甚至是“MRI”(Matz的Ruby,默认实现)和替代品(如JRuby或Rubinius)。请注意,此字段中并不单独使用RVM,例如请参阅rbenv

RVM中的 gemset 是一组特定于给定上下文的宝石,通常是项目。如果您正在开发不同的应用程序,每个应用程序都有自己的宝石集,并希望将它们分开,这非常有用。

system Ruby 在使用RVM时,安装在计算机上的Ruby版本(即不通过RVM)。

如果您刚刚开始,宝石和捆绑包是您感兴趣的。你现在可以把RVM和gemset放在一边。

答案 1 :(得分:1)

您要求在一个问题中提供更多信息,而不是Stack Overflow的范围内。所有这些都需要一本书。

在Ubuntu上,可以很容易地将gem安装到Ruby的“系统”版本,因此习惯通过sudo安装和删除常规gem。 (在Mac OS上我会给出不同的建议,因为Apple将Ruby捆绑用于自己的使用,并且把它弄得一团糟并不是一个好主意。)然后,当你知道整个宝石的想法是如何工作的,并且你知道你想要多个系统上的Ruby版本,请尝试“rbenv”或“RVM”并在沙箱中安装一个或两个版本。

Linux可以很容易地通过发行版添加/删除Ruby,但我们仅限于发行版维护者打包的版本,因此我通常从源代码安装。但是,在为开发,测试和生产系统管理多个版本的Ruby时,这是一个痛苦,这就是rbenvRVM被发明的原因 - 它们处理脏的细节,使我们能够专注于编程。 / p>

我已经使用了rbenvRVM,并且在过去的六个月左右一直使用rbenv,效果很好。它比我喜欢的RVM简单。在任何一种情况下,它们都可以轻松安装不同的版本,并使用单独的Gems集。如果需要,可以在不同的终端窗口中打开不同的Ruby版本,从而可以轻松测试兼容性。

规则一,当调试是一次一个地进行更改时,这对于学习编程或学习新语言是正确的。不要分心,只要保持简单。