rubygemsの動作がよく分からない


$ gem install mislav-will_paginate
一般ユーザー権限で上のようにgem installを実行すると、~/.gem/ruby/1.8以下にmislav-will_paginateがインストールされる。
しかし以下のような警告が出る。

WARNING: Installing to ~/.gem since /usr/lib/ruby/gems/1.8 and
/usr/bin aren't both writable.
WARNING: You don't have /home/totemn/.gem/ruby/1.8/bin in your PATH,
gem executables will not run.
書き込み権限が無いので/usr/lib/ruby/gems/1.8/以下にはインストールできないということらしい。
この状態で

$ gem list
を実行すると、mislav-will_paginateはちゃんと出力される。
しかし

$ gem uninstall mislav-will_paginate
を実行してアンインストールしようとすると、以下のエラーが出てアンインストールできない。

ERROR: While executing gem ... (Gem::InstallError)
Unknown gem mislav-will_paginate >= 0
~/.gem/ruby/1.8以下のライブラリは見つけられないようだ。
仕方なく~/.gem/ruby/1.8以下のgem本体やspecファイルを手動で削除するとgem listの出力からも消えた。
gem listは/usr/lib/ruby/gems/1.8と~/.gem/ruby/1.8を両方見てくれるけど、gem uninstallは/usr/lib/ruby/gems/1.8を調べた時点でmislav-will_paginateが無いければすぐにエラー出すてことなのかな。
ネットで調べると

$ sudo gem install mislav-will_paginate
とするのが正しいらしい。
この方法だと、/usr/lib/ruby/gems/1.8以下にのみインストールされる。
gem listで出力されるし、sudo gem uninstallでちゃんとアンインストールできる。
~/.gemを作成する機能があるのにユーザごとにライブラリを管理することは想定してないのだろうか。
何のための~/.gemなんだろう。





※追記


$ gem install mislav-will_paginate
でインストールした場合も、

$ gem uninstall -i ~/.gem/ruby/1.8 mislav-will_paginate
とパスを指定してやるとアンインストールできた。


$ gem env
> - GEM PATHS:
> - /usr/lib/ruby/gems/1.8
> - /home/totemn/.gem/ruby/1.8
gemコマンドはこのパスを見ていて、
gem installは、上から順にパスを見ていき、インストールできるところがあればそこにインストールする。
gem listは、全てのパスを調べて全部出力してる。
gem uninstallは、/usr/lib/ruby/gems/1.8からアンインストールしようとするが、パスを指定すればそこからのアンインストールも可能。
という感じか。