我正在使用 EC2,有时会启动一些我只想使用一小段时间的服务器。通常我想在这些服务器上安装某个或某些版本的 Ruby,而 RVM 对此非常方便——如果不是因为编译 Ruby 需要很长时间的话。当其余服务器设置只需几分钟即可完成时,仅仅为了编译 Ruby 就必须等待近半个小时,这真的很无聊。它完全破坏了云计算体验。
有没有办法既能享受 RVM 的便利,又不必为启动的每个新服务器编译每个 Ruby 版本?我可以预编译一个 Ruby 版本并将其保存在可访问的地方,然后让 RVM 使用它而不是从源代码编译它吗?安装 Ruby 版本后,我是否可以简单地将某个目录存档在 RVM 根目录下,将其保存在某个地方,然后在我启动的下一个服务器上将其提取到正确的位置?在这种情况下,我需要保留哪些文件和目录?
我想使用 RVM 不仅能够在 Ruby 版本之间切换,还因为它允许我为不同的应用程序保留单独的 gemset,因此不使用 RVM 会非常不方便。
所有服务器具有相同的操作系统和架构,Ubuntu 10.04,32 位。
答案1
如果您汇总并部署预先配置的 ~/.rvm 文件夹并确保远程 .bashrc 已配置为使用它,您会遇到任何问题吗?据我所知,rvm 旨在允许您执行此操作。
我认为唯一的障碍可能是确保您拥有正确的 gem 和包以允许您的代码运行。但是,您会在目标平台上准备 .rvm,对吗?此外,还要考虑您的 ruby 环境所需的任何操作系统包。
答案2
现在可能有点过时了,但从 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.
因此我查看了预构建二进制文件中实际可用的内容:
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 分钟)。希望这能帮助遇到同样问题的人。
答案3
嗯...为什么不创建一个带有 RVM 和 Ruby 版本的 EBS AMI 并在需要时启动它呢?只是一个想法。:)
答案4
在 RVM 的最新版本中,你可以传入--binary
选项
rvm install ruby-2.2.1 --binary --max-time 20
您可以使用以下代码找到可用二进制文件的完整列表:rvm list remote
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