RVM の Gem Sets で gemset の管理
RVM では gemset を複数持つことが出来、 Gem Sets(gemsets) で管理する。
- 勝手な用語解釈
- gemset
- gem list で表示される様な gem一式に 名前を定義したもの
gemset を作成し 使用する
- gemset の一覧を見る
$ rvm gemset list gemsets for ruby-1.9.2-p136 (found in /home/User/.rvm/gems/ruby-1.9.2-p136) global
デフォルトでは 'global' という gemset が用意されている。これは、
RVM で 使用している Ruby のバージョン毎に、共通の gem を インストール
するための gemset。$GEM_PATH を見ると、
$ echo $GEM_PATH /home/User/.rvm/gems/ruby-1.9.2-p136:/home/User/.rvm/gems/ruby-1.9.2-p136@global
と、対象の Ruby のバージョン(上記の場合 ruby-1.9.2-p136) の
gemディレクトリリストの最後で 'global' を読み込むようになっている。
- 現在使用中の gemset を確認する
$ rvm gemset name
何の gemset も使用されていない。(デフォルトでは、上述の
~/.rvm/gems/ruby-1.9.2-p136 という @ がないディレクトリの gem が
読み込まれるのだが、rvm gemset use で 指定することが出来ない。
以前の RVM のバージョンでは指定出来たらしい。) とりあえず、
- gemset 'global' を使用するように指定する。
$ rvm gemset use global Now using gemset 'global' $ rvm gemset name global
これで 'global' が使用される、が、テスト用に
- gemset 'test1' を作成し 使用する。
$ rvm gemset create test1 'test1' gemset created (/home/User/.rvm/gems/ruby-1.9.2-p136@test1). $ rvm gemset list gemsets for ruby-1.9.2-p136 (found in /home/User/.rvm/gems/ruby-1.9.2-p136) global test1 $ rvm gemset use test1 Now using gemset 'test1' $ rvm gemset name test1
これで 'test1' が使用される。$GEM_PATH を見ると、
$ echo $GEM_PATH /home/User/.rvm/gems/ruby-1.9.2-p136@test1:/home/User/.rvm/gems/ruby-1.9.2-p136@global
先程と同様に、最後に 'global' が読み込まれる。
gem をインストール
RubyGems で nokogiri をインストール
- インストール済みの gem を見る
$ gem list *** LOCAL GEMS *** rake (0.8.7) rubygems-update (1.4.2)
また rake と rubygems-update しかインストールされていない。('global'
にインストールされている)
- インストールされていない Nokogiri の動作確認
$ ruby -rnokogiri -e "p Nokogiri::XML(%Q{<a b='c'/>}).at('a')['b']" <internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- nokogiri (LoadError) from <internal:lib/rubygems/custom_require>:29:in `require'
当然エラー。
- nokogiri をインストール
$ gem install nokogiri --no-ri --no-rdoc Building native extensions. This could take a while... Successfully installed nokogiri-1.4.4 1 gem installed $ gem list *** LOCAL GEMS *** nokogiri (1.4.4) rake (0.8.7) rubygems-update (1.4.2)
インストールされた、か?
- Nokogiri の動作確認
$ ruby -rnokogiri -e "p Nokogiri::XML(%Q{<a b='c'/>}).at('a')['b']" "c"
成功。インストールされている。
現在の gem一式を 別の gemset に コピーする
export, import を使う
現在の gemset 'test1' は テスト用で、Nokogiri を常に使える状態に
したいので、'test1' の gem一式を gemset 'global' にコピーする。
- 現在使用中の gemset にインストールされている gem の一覧を出力
$ rvm gemset export test1.gems Exporting current environments gemset to test1.gems
出力ファイル(上記の場合 'test1.gems') を指定しない場合 default.gems
に出力される。内容は gem の名前とバージョンの一覧が記載されている。
- gemset 'global' に切り替える。
$ rvm gemset use global Now using gemset 'global' $ gem list *** LOCAL GEMS *** rake (0.8.7) rubygems-update (1.4.2) $ ls `rvm gemdir`/gems/ rake-0.8.7/ rubygems-update-1.4.2/
まだ rake と rubygems-update だけがインストールされている状態。
- gem の一覧を インポート
$ rvm gemset import test1.gems Installing gems listed in test1.gems file... installing nokogiri 1.4.4... nokogiri 1.4.4 installed. Processing of test1.gems is complete. $ gem list; ls `rvm gemdir`/gems *** LOCAL GEMS *** nokogiri (1.4.4) rake (0.8.7) rubygems-update (1.4.2) nokogiri-1.4.4/ rake-0.8.7/ rubygems-update-1.4.2/
nokogiri が 'global' にインストールされた。
- Nokogiri の動作確認
$ ruby -rnokogiri -e "p Nokogiri::XML(%Q{<a b='c'/>}).at('a')['b']" "c"
成功。
'test1' は用済みなので
- gemset 'test1' を消去
$ rvm gemset delete test1 Are you SURE you wish to remove the entire gemset directory 'test1' (/home/User/.rvm/gems/ruby-1.9.2-p136@test1)? (anything other than 'yes' will cancel) > yes $ rvm gemset list gemsets for ruby-1.9.2-p136 (found in /home/User/.rvm/gems/ruby-1.9.2-p136) global
'test1' が消去された。
copy を使う
単純に コピーだけなら、
$ rvm gemset create test2 'test2' gemset created (/home/User/.rvm/gems/ruby-1.9.2-p136@test2). $ rvm gemset copy 1.9.2-p136@global 1.9.2-p136@test2 Copying gemset from 1.9.2-p136@global to 1.9.2-p136@test2 Making gemset for 1.9.2-p136@test2 pristine. $ rvm gemset use test2 Now using gemset 'test2' $ gem list *** LOCAL GEMS *** nokogiri (1.4.4) rake (0.8.7) rubygems-update (1.4.2)
と出来るらしい。