それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ruby のgemをユーザー環境に導入する。

始めに

パッケージ(Apt)提供のrubygemsはそのままに、自分のホームディレクトリ以下にGem環境を作ること。
またRubyの環境はシステム環境モノを利用する。

事前に知っておくべきこと

Ruby環境変数$LOAD_PATH($:/RUBYLIB)

$:とは、
Rubyインタプリタが、Reqiuire時に読み込むモジュールファイルの優先度のこと。

ホームディレクトリ以下に独自のGemを作るとはすなわち、ホームディレクトリ(/home/takuya/lib/gem)の優先度を上げ、システム(/usr/lib/ruby/1.8/gem/lib)より優先にすること。
と考えたらいいようだ。

設定

aptでRuby/rubygemはインストール済み

今のgem環境を確認
takuya@hiei:~$ gem -v
1.3.1

Ruby環境を確認

takuya@hiei:~$ ruby -e 'puts $:'
/usr/local/lib/site_ruby/1.8
/usr/local/lib/site_ruby/1.8/i486-linux
/usr/local/lib/site_ruby/1.8/i386-linux
/usr/local/lib/site_ruby
/usr/lib/ruby/vendor_ruby/1.8
/usr/lib/ruby/vendor_ruby/1.8/i486-linux
/usr/lib/ruby/vendor_ruby
/usr/lib/ruby/1.8
/usr/lib/ruby/1.8/i486-linux
/usr/lib/ruby/1.8/i386-linux
.
takuya@hiei:~$
次に、優先度を弄る。
takuya$ export RUBYLIB=~/.gem/lib
変更されたことを確認
takuya@hiei:~$ ruby -e 'puts $:'
/home/takuya/.gem/lib               #←追加された!!
/usr/local/lib/site_ruby/1.8
/usr/local/lib/site_ruby/1.8/i486-linux
/usr/local/lib/site_ruby/1.8/i386-linux
/usr/local/lib/site_ruby
/usr/lib/ruby/vendor_ruby/1.8
/usr/lib/ruby/vendor_ruby/1.8/i486-linux
/usr/lib/ruby/vendor_ruby
/usr/lib/ruby/1.8
/usr/lib/ruby/1.8/i486-linux
/usr/lib/ruby/1.8/i386-linux
.
takuya@hiei:~$
rubygemをインストール
takuya@hiei:~$ wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
takuya@hiei:~$ tar zxvf rubygems-1.3.5.tgz
takuya@hiei:~$ cd rubygems-1.3.5/
takuya@hiei:~/rub...$ ruby setup.rb --prefix=~/.gem
インストールを確認
takuya@hiei:~$ /home/takuya/.gem/bin/gem1.8 -v
1.3.5 #←インストール出来た!!

2011-10-04追記

.gemrc が自動生成(いつ作ったか覚えてない?)されていて、環境を作ってくれてたようです。

takuya@atom:~$ cat .gemrc 
gem: --user-install
gempath: ["/home/takuya/.gem/ruby/1.8"]


.gemrc で指定された箇所がインストール先に利用されて、ユーザー環境でgem install が動きます。

GEM_HOMEもPATHも弄らないのはなぜ?

GEM_HOMEはデフォルトで組み込まれている。

GEM_HOMEはrubygem1.3.0からデフォルトで組み込まれている。そしてわざわざ弄る必要がない。

Rubygems 1.3.0から Gem.user_dir というメソッドが追加されていて、gemコマンドでインストールされるディレクトリにデフォルトで $HOME/.gem 以下も追加してくれています。しかもこれ、Rubyの処理系ごと(1.8.x,1.9.x,JRuby等)にディレクトリを分けてくれます。
http://rubyist.g.hatena.ne.jp/from_kyushu/20090605/1244189125

PATHはモトモトのまま

PATHはもともとパッケージの/usr/bin/gemを使っている。'rubygems'モジュールを変えただけ。だからPATHはそのままで良い。

注意

コレは、rubygemsモジュールを、入れ替えているだけなので、自分のgemに無くても、システムGEMにあれば使えるので、バージョン管理には気を遣う必要がある。

2016-07-05 追記

gem のインストール先を決定するのは

  • GEM_HOME
  • .gemrc

の2つがあって環境変数GEM_HOMEが優先

.gemrc には、gem に関する各種環境設定を書くことが出来る

gem の設定を確認するには environmentを使う

 gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 2.2.2
  - RUBY VERSION: 2.1.5 (2014-11-13 patchlevel 273) [x86_64-linux-gnu]
  - INSTALLATION DIRECTORY: /var/lib/gems/2.1.0
  - RUBY EXECUTABLE: /usr/bin/ruby2.1
  - EXECUTABLE DIRECTORY: /usr/local/bin
  - SPEC CACHE DIRECTORY: /home/takuya/.gem/specs
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /var/lib/gems/2.1.0
     - /home/takuya/.lib/ruby
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - "gem" => "--user-install"
     - "gempath" => ["/home/takuya/.lib/ruby"]
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /home/takuya/.bin
     - /usr/local/games
     - /usr/local/sbin
     - /usr/local/bin
     - /usr/games
     - /usr/sbin
     - /usr/bin
     - /sbin
     - /bin
~/.gems

 --user-installを選んだ時は ~/.gem が使われるようだ

指定した値だけを確認

GEM_PATHS だけ見たいときはこうする。

gem environment GEM_PATHS
/home/takuya/.lib/ruby:/var/lib/gems/2.1.0

2012/01/26追加

ビルド環境があるならRVM使ったほうが楽かもしれないですよ。