捆绑程序vs RVM vs宝石vs RubyGems vs gemsets vs系统红宝石[关闭]


102

我是Ruby的新手,并试图将我的头围绕以下概念:bundler,RVM,gem,Ruby,Gems,gemsets,system rub,我很困惑。

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

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

Answers:


184

根据先前的答案,这涉及很多内容,因此请简短介绍一下。

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

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

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

一个宝石在RVM是一组特定的宝石,以给定的情况下,通常一个项目。例如,如果您要开发不同的应用程序(每个应用程序都有其自己的gem),并希望将它们分开,则这很有用。

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

如果您刚刚开始,宝石和捆扎机对您很感兴趣。您可以暂时不考虑RVM和宝石集。


1
好答案,请您澄清一下:gem和RubyGems有什么区别?在gemspec和Gemfile之间?另外,上面列出的哪些程序(例如bundler)包含在“ Ruby”中,哪些是独立的应用程序(我相信RVM是独立的)?gemset仅仅是仅在RVM中的概念,还是在核心Ruby中(或其他答案中提到的rbenv之类的东西)?并且,如果捆绑程序使管理宝石更容易,那么捆绑程序的预备方式是什么?(即,即使我永远不会那样做,我也知道如何在没有捆绑器的情况下管理宝石。)谢谢!
user779159 2013年

那么Rubygems是包管理器的名称,您可以通过'gem'命令调用它吗?就像Rubygems一样,bundler还是Ruby本身的一部分,还是我需要以某种方式包含它?
user779159 2013年

2
“如果您只是开始... [您]可以暂时将RVM ...放在一边。” 除非您使用的是OS X,否则要安装和运行的Ruby项目取决于Ruby的更高版本,而不是OS上预先安装的版本。然后,您将需要RVM。
Hephaestus

事实并非如此:“使用标准gem命令,您将必须手动安装它们。” 您绝对可以使用单个命令“ gem install”将所有gem安装在gemfile中
Andy

1

您希望在一个问题中提供比堆栈溢出范围内更多的信息。覆盖所有内容都需要一本书。

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

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

我已经使用了rbenvRVM,并且在过去六个月左右的时间内一直使用rbenv,效果很好。它没有我喜欢的RVM复杂。无论哪种情况,它们都可以通过单独的宝石组轻松地安装不同版本。如果需要,可以在不同的终端窗口中打开不同的Ruby版本,从而可以轻松测试兼容性。

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


1
除了您的默认系统软件包管理器(例如apt或apt-get)以外,切勿对任何软件包管理器进行sudo。您将不可避免地使系统混乱。
图片
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.