EC2を使用していて、短時間だけ使用したいサーバーを起動することがあります。通常、私はいくつかのバージョンのRubyをそれらにインストールしたいのですが、このRVMは、Rubyのコンパイルに永遠にかかるという事実がなければ、非常に便利です。本当にサーバーの残りのセットアップが数分で完了すると、Rubyがコンパイルされるまで、ほぼ30分待たなければならないのは退屈です。クラウドコンピューティングのエクスペリエンスが完全に失われます。
新しいサーバーを起動するたびに各Rubyバージョンをコンパイルする手間をかけずにRVMの利便性を得る方法はありますか?Rubyバージョンとアクセス可能な場所に保管し、ソースからコンパイルする代わりにRVMにそれを使用させますか?Rubyバージョンをインストールした後、RVMルートディレクトリの下にディレクトリをアーカイブして、どこかに保存できますか?次に起動するサーバーの適切な場所に解凍しますか?その場合、どのファイルとディレクトリを保持する必要がありますか?
RVMを使用してRubyバージョンを切り替えることができるだけでなく、アプリケーションごとに別々のgemsetを保持できるため、RVMを使用しないと非常に不便になります。
すべてのサーバーは同じOSとアーキテクチャ、Ubuntu 10.04、32ビットを備えています。
事前構成された〜/ .rvmフォルダーをロールアップしてデプロイし、リモートの.bashrcがそれを使用するように構成されていることを確認すると、問題が発生しますか?私の知る限り、rvmはこれを実行できるように設計されています。
私が想像する唯一の問題は、コードを実行できるように適切なgemとパッケージを配置することです。しかし、それなら、ターゲットプラットフォームで.rvmを準備しますよね?また、Ruby環境で必要なOSパッケージを考慮に入れてください。
おそらく今は少し長いですが、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分とは対照的です)。これが同じ問題を抱えている他の誰かに役立つことを願っています。
うーん..RVMとRubyバージョンを使用してEBSAMIを作成し、いつでも起動してみませんか?考えてみてください。:)
RVMを使い続けたくない場合は、Ruby-enterpriseのバイナリパッケージを使用したいと思うかもしれません。インストールがはるかに速いという理由だけでなく、現在Ubuntu/Debianでひどく行われているパッケージのために私はそれを使用しています。
したがって、Ubuntu用のバイナリパッケージがあり、latestバージョン以外にも、以前のバージョンなどをダウンロードできると確信しています。
それをチェックしてください: http://www.rubyenterpriseedition.com/download.html#ubunt
唯一の問題は、これではおそらく同じインスタンスでのRubyインストールを切り替えることができないことです。それが絶対に必要なものかどうかはわかりません。
ただし、それ以外の場合は、スクリプトをアンインストールして、bashまたはシェフのレシピを使用してインストールするのは簡単です。しかしもちろん、それはrvmほど便利ではありません。
編集:
REE .debを使用できない場合、最も簡単なのは、EBSベースのAMIを作成し、最もよく使用するRubyバージョンと一緒にrvmインストールを含めることです。これは、問題。
別の解決策は、/etc/rvm
(システム全体のインストールを想定)でrvm_path
、rvm_prefix
、rvm_bin_path
、およびrvm_man_path
をチェックし、それらのファイルを取得してダウンロードすることです。あなたがそれを起動したときのインスタンスで。
このプロセスは、起動時にEC2インスタンス(user-data
を参照)に渡す小さなシェルスクリプトを使用して自動化できます。
一般的な方法として、追加のRubyバージョンを多分コンパイルを高速化するときに、カスタム./configure
フラグをrvmに渡すことも確認します。正確にはわかりませんが、.rvm
ファイルなどに保存できると思います。
上記の代替手段は、より強力なインスタンスを取得することですが、インスタンスを実行するための関連コストも高いため、長期的にはうまくいかない可能性があります。
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