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

use*_*159 96 ruby gem rubygems bundler rvm

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

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

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

Mar*_*tin 174

根据之前的回答,这涉及到很多,所以请考虑这个简短的介绍.

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

Bundler是管理宝石可以忍受的原因.根据您的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是一组针对特定的情况下,通常一个项目的宝石.如果您正在开发不同的应用程序,每个应用程序都有自己的宝石集,并希望将它们分开,这将非常有用.

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

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

  • 很好的答案,您能澄清一下:gems 和 RubyGems 之间有什么区别吗?那么 gemspec 和 Gemfile 之间呢?另外,上面列出的这些程序(例如捆绑程序)中哪些包含在“Ruby”中,哪些是单独的应用程序(我相信 RVM 是单独的)?gemset 仅仅是 RVM 中的一个概念还是它也在核心 Ruby 中(或其他东西,比如其他答案中提到的 rbenv)?如果捆绑器使管理 gem 变得更容易,那么预捆绑器的做法是什么?(即,如果没有捆绑器,您将如何管理宝石,只是我知道,即使我永远不会这样做。)谢谢! (2认同)
  • "如果你刚刚开始... [y]你可以让RVM暂时放在一边." 除非您使用的是OS X,否则您要安装和运行的Ruby项目取决于Ruby的更高版本,而不是预安装在操作系统上的版本.然后你将需要RVM. (2认同)