捆绑vs RVM vsgemvs RubyGems vs gemsets vs系统ruby

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

有人可以描述一下我应该如何pipe理所有这些最新版本的Ubuntu的“最佳做法”吗? 我应该安装什么,我应该如何使用它?

我猜测,做一个sudo apt-get install ruby不build议,但我不知道。 除了“所有其他Ruby的东西”之外,我在我的系统上尝试了它。 这只是增加了我的困惑。 我不是在谈论Rails,而只是定期的Rubygem(例如Vagrant,Chef,脚本)。

根据以前的答案,这是相当多的涵盖,所以这是一个简短的介绍。

gem是Ruby库的包装方式。 他们对Ruby来说是Java的瓶子。 在一个gem文件里面,你可以findRuby代码(.rb文件),也可以testing,还有一个特殊的文件给出了gem本身的信息,比如它的名字,依赖和版本( gemspec )。 任何Ruby项目都可以通过只需声明依赖关系的Gemfile来定义它需要的gem。 Rubygems是包pipe理器的名称 – 用于安装包的工具(而gem是包本身)。 Rubygems现在是Ruby的一部分。

Bundler是pipe理gem可以承受的。 根据您的Gemfile,使用软件包安装简单地调用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是一组特定于给定上下文的gemset ,通常是一个项目。 例如,如果您正在开发不同的应用程序,每个应用程序都有自己的一套gem,并希望将它们分开。

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

如果你刚刚开始,gem和打包机是你的兴趣。 现在你可以让RVM和gemsets放在一边。

在一个问题中,您要求的信息多于Stack Overflow的范围。 为了掩盖这一切,将采取一本书。

在Ubuntu上,安装和删除Ruby的“系统”版本很容易,所以习惯于通过sudo安装和删除常规gem。 (在Mac OS上,我给出了不同的build议,因为苹果将Ruby捆绑为自己使用,这不是一个好主意。)然后,当你有一个想法如何整个创业板的想法的作品,你知道你想多在您的系统上使用Ruby版本,请尝试使用“ rbenv ”或“ RVM ”并在沙箱中安装一两个版本。

Linux通过发行版很容易地添加/删除Ruby,但是我们仅限于发行版维护者打包的版本,所以我通常从源代码安装。 但是,当为开发,testing和生产系统pipe理几个Ruby版本时,这是一个痛苦的问题,这就是为什么rbenv和RVM被发明出来的原因 – 它们处理肮脏的细节,让我们专注于编程。

我已经使用rbenv和RVM ,并在过去六个月左右一直使用rbenv,效果很好。 它比我喜欢的RVM更简单。 在任何一种情况下,他们都可以很容易地安装不同的版本,并带有独立的Gems套件。 如果需要,您可以在不同的terminal窗口中打开不同的Ruby版本,从而可以轻松testing兼容性。

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