是否可以使用RVM安装预编译的Ruby版本?

我正在使用EC2,有时会启动我只想使用很短时间的服务器。 通常我想在它们上面安装一些版本的Ruby,对于这个RVM是非常方便的 – 如果不是因为编译Ruby需要永远的事实。 当几分钟内完成其余的服务器设置时,Ruby需要等待将近半个小时才真正无聊。 它彻底杀死了云计算的经验。

有没有一种方法来获得RVM的便利,而不是每个新服务器编译每个Ruby版本的不便之处? 我可以预编译一个Ruby版本并将其保存在可访问的地方,然后让RVM使用它而不是从源代码编译它? 在安装了Ruby版本之后,我可以直接在RVM根目录下存档一个目录,将它保存在某个地方,然后将其提取到我启动的下一个服务器的正确位置。 在那种情况下,我需要保留哪些文件和目录?

我想使用RVM不仅能够在Ruby版本之间切换,还因为它允许我为不同的应用程序保留不同的gemset,因此不使用RVM会非常不方便。

所有服务器具有相同的操作系统和体系结构,Ubuntu 10.04,32位。

如果您汇总并部署预configuration的〜/ .rvm文件夹并确保将远程.bashrcconfiguration为使用它,那么是否会遇到任何问题? 从我可以告诉,rvm旨在让你做到这一点。

我想象的唯一障碍可能在于确保你有正确的gem和包,以允许你的代码运行。 但是,那么你会在目标平台上准备你的.rvm吗? 另外,请考虑您的ruby环境所需的任何操作系统软件包。

现在可能有点长,但是1.16 rvm支持下载预编译的二进制文件。

当我要求头版(即1.9.3)时,我遇到了困难,

20130212 00:31:00 dev@domU-xxxx:~ rvm install 1.9.3 Searching for binary rubies, this might take some time. No binary rubies available for: ubuntu/12.04/i386/ruby-1.9.3-p385. Continuing with compilation. Please read 'rvm mount' to get more information on binary rubies. 

所以我看了预先build立的二进制文件中实际可用的内容:

 20130212 00:31:27 dev@domU-xxxx:~ rvm list remote # Rubies available for 'ubuntu/12.04/i386': ruby-1.9.3-p194 ruby-1.9.3-p286 ruby-1.9.3-p327 ruby-1.9.3-p362 ruby-1.9.3-p374 ruby-2.0.0-rc1 

并修改我的安装要求最新的预编译版本

 20130212 00:34:25 dev@domU-xxxx:~ rvm install 1.9.3-p374 Searching for binary rubies, this might take some time. ruby-1.9.3-p374 - #configure ruby-1.9.3-p374 - #download ######################################################################## 100.0% ruby-1.9.3-p374 - #validate archive ruby-1.9.3-p374 - #extract ruby-1.9.3-p374 - #validate binary ruby-1.9.3-p374 - #setup Saving wrappers to '/home/dev/.rvm/bin'. ruby-1.9.3-p374 - #importing default gemsets, this may take time ... 20130212 00:35:59 dev@domU-xxxxx:~ 

正如您所看到的,运行时间不到2分钟(而不是在EC2小实例上编译15-20分钟)。 希望这可以帮助有相同问题的其他人。

嗯..为什么不用RVM和Ruby版本创build一个EBS AMI,并随时启动它? 只是一个想法。:)

如果你不想继续使用RVM,那么也许你会想使用ruby-enterprise的二进制包? 我使用它不仅仅是因为安装速度要快很多,而且还因为Ubuntu / Debian当前的可怕的软件包。

所以有Ubuntu的二进制包,我敢肯定,除了最新版本,他们也让你下载以前的版本,等等。

检查出来: http : //www.rubyenterpriseedition.com/download.html#ubuntu

唯一的问题是,这可能不会允许您在同一个实例上的ruby安装之间来回切换。 我不确定这是否是你绝对需要的。

但除此之外,脚本卸载并安装在bash中,或者也可以使用一个厨师配方,将会很简单。 但是,这当然不像rvm那么方便。

编辑:

如果你不能使用REE .deb,最简单的方法是创build一个基于EBS的AMI,并包含一个rvm安装和最常用的ruby版本。 这只是解决问题的唯一方法。

另一个解决scheme是检查rvm_pathrvm_prefixrvm_bin_pathrvm_man_path /etc/rvm (假定系统范围内安装),并在rvm_man_path获取这些文件并将它们下载到实例上。

这个过程可以通过一个小的shell脚本来自动完成,当你启动它的时候,它会传递给EC2实例(参见user-data )。

作为一个通用的措施,我还会检查传递自定义./configure标志到rvm,当你build立额外的ruby版本, 也许加快编译。 我不确定,但我敢打赌,你可以将它们保存到.rvm文件或类似的文件中。

上面的替代scheme得到了一个更强有力的例子,但从长远来看,这个scheme可能并不成功,因为运行一个方面的相关成本也较高。

在最新版本的RVM中,您可以传入--binary选项

 rvm install ruby-2.2.1 --binary --max-time 20 

您可以使用rvm list remotefind可用的二进制文件的完整列表

 rvm list remote # Remote rubies available: jruby-0.9.0 jruby-1.6.5 jruby-1.7.8 jruby-1.7.9 jruby-9.0.0.0.pre1 jruby-9.0.0.0.pre2 jruby-9.0.0.0.pre2200 jruby-9.0.0.0.rc1 jruby-9.0.0.0.rc1200 jruby-9.0.0.0.rc2 jruby-9.0.0.0.rc2200 rubinius-1.4.6 rubinius-2.3.0 rubinius-2.5.3 rubinius-2.5.4 rubinius-2.5.5 rubinius-2.5.7 ruby-1.9.3-p547 ruby-1.9.3-p551 ruby-2.0.0-p481 ruby-2.0.0-p576 ruby-2.0.0-p598 ruby-2.1.2 ruby-2.1.3 ruby-2.1.5 ruby-2.2.0 ruby-2.2.1 # * - installed already # To download and install: rvm install {name} --binary