112

我是 Ruby 新手,并试图围绕以下概念进行思考:bundler vs RVM vs gems vs RubyGems vs gemsets vs system rub,我很困惑。

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

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

4

2 回答 2

209

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

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

Bundler使管理 gems 变得可以忍受。根据您的 Gemfile,使用bundle install对 bundler 的简单调用将下载并安装所有必需的 gem。使用标准 gem 命令,您必须手动安装它们中的每一个,使用gem install <gem_name>. Bundler 不是 Ruby 的一部分(它本身被打包为 gem),但它是大多数应用程序的“事实上的标准”(你不会发现很多人不使用它,实际上也没有充分的理由不使用它)。

RVM是一种工具,允许您在一台机器上安装多个版本的 Ruby,并在需要时在它们之间切换。这可用于安装 Ruby 1.8 和 1.9,甚至是“MRI”(Matz 的 Ruby,默认实现)和替代品(例如 JRuby 或 Rubinius)。请注意,RVM 在该领域并不孤单,请参见例如rbenv

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

系统 Ruby是在使用 RVM 时安装在机器上的 Ruby 版本(即,不是通过 RVM)。

如果您刚刚开始,那么您会对 gems 和 bundler 感兴趣。您现在可以将 RVM 和 gemsets 放在一边。

于 2013-03-23T12:16:40.787 回答
1

您在一个问题中询问的信息超出了 Stack Overflow 的范围。要涵盖这一切需要一本书。

在 Ubuntu 上,很容易在 Ruby 的“系统”版本中安装和删除 gem,所以习惯于通过sudo. (在 Mac OS 上,我会给出不同的建议,因为 Apple 捆绑 Ruby 供他们自己使用,而且混用它并不是一个好主意。)您系统上的 Ruby 版本,尝试“ rbenv ”或“ RVM ”并在您的沙箱中安装一个或两个版本。

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

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

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

于 2013-03-23T11:56:25.827 回答