web-dev-qa-db-ja.com

プリコンパイルされたRubyバージョンをRVMでインストールすることは可能ですか?

EC2を使用していて、短時間だけ使用したいサーバーを起動することがあります。通常、私はいくつかのバージョンのRubyをそれらにインストールしたいのですが、このRVMは、Rubyのコンパイルに永遠にかかるという事実がなければ、非常に便利です。本当にサーバーの残りのセットアップが数分で完了すると、Rubyがコンパイルされるまで、ほぼ30分待たなければならないのは退屈です。クラウドコンピューティングのエクスペリエンスが完全に失われます。

新しいサーバーを起動するたびに各Rubyバージョンをコンパイルする手間をかけずにRVMの利便性を得る方法はありますか?Rubyバージョンとアクセス可能な場所に保管し、ソースからコンパイルする代わりにRVMにそれを使用させますか?Rubyバージョンをインストールした後、RVMルートディレクトリの下にディレクトリをアーカイブして、どこかに保存できますか?次に起動するサーバーの適切な場所に解凍しますか?その場合、どのファイルとディレクトリを保持する必要がありますか?

RVMを使用してRubyバージョンを切り替えることができるだけでなく、アプリケーションごとに別々のgemsetを保持できるため、RVMを使用しないと非常に不便になります。

すべてのサーバーは同じOSとアーキテクチャ、Ubuntu 10.04、32ビットを備えています。

5
Theo

事前構成された〜/ .rvmフォルダーをロールアップしてデプロイし、リモートの.bashrcがそれを使用するように構成されていることを確認すると、問題が発生しますか?私の知る限り、rvmはこれを実行できるように設計されています。

私が想像する唯一の問題は、コードを実行できるように適切なgemとパッケージを配置することです。しかし、それなら、ターゲットプラットフォームで.rvmを準備しますよね?また、Ruby環境で必要なOSパッケージを考慮に入れてください。

0
Cawflands

おそらく今は少し長いですが、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分とは対照的です)。これが同じ問題を抱えている他の誰かに役立つことを願っています。

5
Jamie Cook

うーん..RVMとRubyバージョンを使用してEBSAMIを作成し、いつでも起動してみませんか?考えてみてください。:)

1
rquillo

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_pathrvm_prefixrvm_bin_path、およびrvm_man_pathをチェックし、それらのファイルを取得してダウンロードすることです。あなたがそれを起動したときのインスタンスで。

このプロセスは、起動時にEC2インスタンス(user-dataを参照)に渡す小さなシェルスクリプトを使用して自動化できます。

一般的な方法として、追加のRubyバージョンを多分コンパイルを高速化するときに、カスタム./configureフラグをrvmに渡すことも確認します。正確にはわかりませんが、.rvmファイルなどに保存できると思います。

上記の代替手段は、より強力なインスタンスを取得することですが、インスタンスを実行するための関連コストも高いため、長期的にはうまくいかない可能性があります。

1
Till

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
0
spuder