问题 RVM的好处


我为什么不应该使用RVM?

我是ruby语言和服务器的新手。我在安装使用RVM时遇到了一些麻烦...所以我现在倾向于不使用它,但似乎它可能会使安装变得更容易?

我很想知道您对RVM的体验以及您对维护服务器的想法。


10027
2018-06-22 13:45


起源



答案:


即使您不想同时安装多个版本,RVM也很有用。我是一个红宝石爱好者(白天的PHP :(),我没有理由想使用旧版本,但我仍然使用RVM。

安装红宝石是一种痛苦。从包管理器(至少在ubuntu中)获取它会为您提供一个过时的版本,可以从默认值更改安装目录。我只有它的问题。

所以你想,“我只是从源头构建它”。从源构建需要获得大量依赖项和配置选项。我经常构建ruby只是为了发现我忘记启用SSL支持或readline支持。

RVM负责所有这些。在3个左右的命令中,你有一个完美构建的ruby版本。

我甚至没有介绍RVM如何为您管理多个ruby安装,这是它的杀手级功能。如果您有这种需求,实际上没有其他合理的解决方案。


10
2018-06-22 13:56



是的,我发现了这一点 - 我害怕我有一堆虚拟的红宝石,因为我有点不知道我现在正在做什么。 :P - Kevin Brown
即使您不需要多个ruby安装,也可能需要多个 gemsets,模型示例是需要使用不同Rails版本的应用程序。 - Mladen Jablanović
@Mladen:带捆绑器的Rubygems已经为你做了这件事。 Rubygems允许您保留同一gem的多个版本,bundler允许您指定要加载的gem的哪个版本。 - ryeguy
@ryeguy:我自己对Bundler没有多少工作,例如,gems经常安装的可执行文件是如何工作的?它能解决潜在的碰撞吗? - Mladen Jablanović
@Mladen:好问题。我刚尝试过。全部 bin 所有gem版本的文件仍可访问,但您必须完全限定路径才能访问它们,因为只有最新版本的二进制文件才会出现在您的路径上。所以在可执行文件的情况下,rvm可能会更好。 - ryeguy


答案:


即使您不想同时安装多个版本,RVM也很有用。我是一个红宝石爱好者(白天的PHP :(),我没有理由想使用旧版本,但我仍然使用RVM。

安装红宝石是一种痛苦。从包管理器(至少在ubuntu中)获取它会为您提供一个过时的版本,可以从默认值更改安装目录。我只有它的问题。

所以你想,“我只是从源头构建它”。从源构建需要获得大量依赖项和配置选项。我经常构建ruby只是为了发现我忘记启用SSL支持或readline支持。

RVM负责所有这些。在3个左右的命令中,你有一个完美构建的ruby版本。

我甚至没有介绍RVM如何为您管理多个ruby安装,这是它的杀手级功能。如果您有这种需求,实际上没有其他合理的解决方案。


10
2018-06-22 13:56



是的,我发现了这一点 - 我害怕我有一堆虚拟的红宝石,因为我有点不知道我现在正在做什么。 :P - Kevin Brown
即使您不需要多个ruby安装,也可能需要多个 gemsets,模型示例是需要使用不同Rails版本的应用程序。 - Mladen Jablanović
@Mladen:带捆绑器的Rubygems已经为你做了这件事。 Rubygems允许您保留同一gem的多个版本,bundler允许您指定要加载的gem的哪个版本。 - ryeguy
@ryeguy:我自己对Bundler没有多少工作,例如,gems经常安装的可执行文件是如何工作的?它能解决潜在的碰撞吗? - Mladen Jablanović
@Mladen:好问题。我刚尝试过。全部 bin 所有gem版本的文件仍可访问,但您必须完全限定路径才能访问它们,因为只有最新版本的二进制文件才会出现在您的路径上。所以在可执行文件的情况下,rvm可能会更好。 - ryeguy


RVM很棒,因为这允许您安装不同的版本而无需触及系统的默认Ruby安装。它与Python中的virtualenv非常相似。

拥有RVM的另一个巨大优势是gemsets - 您可以创建尽可能多的gemset,这些gemset对于ruby的版本和补丁级别是唯一的。

我赞美它的一些 美德在这里 你也应该 看到这篇博文

在维护服务器方面 - 让我们以乘客安装为例;请记住,Passenger是作为宝石安装的,所以对于rvm来说,这里的好处是你可以有多个乘客安装,绑定到不同版本的ruby。当然,通常情况下,您一次只能在一个版本上运行Passenger,尽管有一些方法可以让Passenger运行在不同的ruby版本上。


2
2018-06-22 13:49



您可以在不同的gemsets中运行不同的应用程序。但目前,所有这些宝石都必须是完全相同的红宝石。 - Holger Just


我为不同的项目使用不同的Ruby版本(这就是.rvmrc非常方便的地方)。一些部署环境对1.9感到满意,而有些遗留服务器由于某些原因使用1.8。另外,偶尔我想推出特定版本的ruby来比较它们的工作方式。 RVM为我做了这一切。


1
2018-06-22 13:49





当您第一次习惯Ruby时,可能并非完全必要。也就是说,它的作用是让你在未来取得成功。因为一旦你上瘾,你最终可能会玩需要从MRI 1.8.x移动到1.9.x的项目。或者从1.9.x到JRuby 1.6.x.我的经验是,这种情况不规则地发生,但是当它发生时,RVM无法替代。

除此之外,我经常使用的另一个最大特点是能够分割一个特定版本。因此,我可以拥有“稳定”宝石的环境,以及“不稳定”宝石的环境。例如,虽然Rails 3.1已经处于发布候选模式,但是我有一个用于1.9.2的主工作空间和一个用于Rails 3.1.rc的单独空间?宝石1.9.2。这使我有可能继续开发我的主要Rails 3.0内容(在CLI中使用一个命令),而无需指定相应rails bin文件的完整文件路径以便使用旧文件。


1
2018-06-22 14:11





如果您使用的是基于Debian的平台,其中packagers / policy会导致非常糟糕的默认安装,那么您将有更好的使用rvm的经验。


0
2018-06-22 14:26