事前に知っておくべきこと
Rubyの環境変数$LOAD_PATH($:/RUBYLIB)
ホームディレクトリ以下に独自のGemを作るとはすなわち、ホームディレクトリ(/home/takuya/lib/gem)の優先度を上げ、システム(/usr/lib/ruby/1.8/gem/lib)より優先にすること。
と考えたらいいようだ。
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
その他参考URL
http://www.gfd-dennou.org/arch/davis/gfdnavi/doc/install/install-rubygems.htm
http://d.hatena.ne.jp/kitamomonga/20090605/ruby_rubygems_bins_install_to_user_dir
2012/01/26追加
ビルド環境があるならRVM使ったほうが楽かもしれないですよ。