Bundler vs RVM vs gems vs RubyGems vs gemset vs system ruby

我对 Ruby 还是个新手,并试图理解以下概念: bundler vs RVM vs gems vs RubyGems vs gemsets vs system rub,我感到很困惑。

Can someone please describe a 'best practice' of how I should manage all this on a fresh install of the latest version of Ubuntu? What should I install, and how should I use it all?

I'm guessing that doing a sudo apt-get install ruby is not be recommended, but I am not sure. I tried it on my system in addition to 'all the other Ruby stuff'. It's just adding to my confusion. I am not talking about Rails but just regular Ruby gems (e.g. Vagrant, Chef, scripts).

19036 次浏览

您在一个问题中要求的信息比 Stack Overflow 的范围内要多。要把这一切都包括在内,需要一本书。

在 Ubuntu 上,很容易在 Ruby 的“系统”版本中安装和删除 gems,所以要习惯于通过 sudo安装和删除常规 gems。(对于 Mac OS,我有不同的建议,因为苹果捆绑 Ruby 是为了他们自己的使用,而且乱搞 Ruby 并不是一个好主意。)然后,当你有一个整个 gem 的想法是如何工作的想法,你知道你想在你的系统上多个 Ruby 版本,尝试“ Rbenv”或“ RVM”,并安装一个或两个版本在你的沙箱。

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

我同时使用了 RbenvRVM,并且在过去六个月左右的时间里一直在使用 rbenv,结果很好。没有我喜欢的 RVM 那么复杂。在任何一种情况下,它们都可以很容易地安装不同的版本,以及单独的 Gems 集。如果愿意的话,可以在不同的终端窗口中打开不同的 Ruby 版本,这样就很容易测试兼容性。

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

正如前面的答案一样,这个问题要涉及的内容很多,因此请将这个问题视为一个简短的介绍。

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

Bundler 使得管理 gem 变得可以忍受。基于 Gemfile,使用 捆绑式安装捆绑式安装对 bundler 的一个简单调用将下载并安装所有需要的 gem。使用标准的 gem 命令,您必须使用 gem install <gem_name>手动安装它们中的每一个。Bundler 不是 Ruby 的一部分(它本身就是 被包装成宝石) ,但它是大多数应用程序的“行业标准”(你不会发现很多人不使用它,实际上也没有理由不使用它)。

RVM 是一个工具,它允许您在一台机器上安装多个版本的 Ruby,并在需要时在它们之间切换。这可以用来安装 Ruby 1.8和1.9,甚至可以用来安装“ MRI”(Matz 的 Ruby,默认实现)和其他替代品(如 JRuby 或 Rubinius)。请注意,RVM 并不是这个字段中唯一的一个,请参见例如 Rbenv

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

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

如果您刚刚开始,gems 和 bundler 是您感兴趣的。你可以让 RVM 和宝石暂时放在一边。