読者です 読者をやめる 読者になる 読者になる

Rubygemsがhomeディレクトリに入ってしまう

ruby

現象

gem list で表示されるのに、gem uninstall してもエラーになってしまう。

例えばgrowlnotifierを抜こうとする。

$ sudo gem uninstall growlnotifier                                [~]
ERROR:  While executing gem ... (Gem::InstallError)
    Unknown gem growlnotifier >= 0

原因

インストール時のPathが違っていた。homeディレクトリ下の.gemに入ってしまっていた。
gemが入っているpathを指定すれば、uninstallできる。

$ gem uninstall -i ~/.gem/ruby/1.8/ growlnotifier

なんでそんなとこに?

まずは自分の rubygem 環境。

$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.1
  - RUBY VERSION: 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9]
  - INSTALLATION DIRECTORY: /opt/local/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /opt/local/bin/ruby
  - EXECUTABLE DIRECTORY: /opt/local/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-darwin-9
  - GEM PATHS:
     - /opt/local/lib/ruby/gems/1.8
     - /Users/hoge/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://gems.rubyforge.org/", "http://gems.github.com"]
  - REMOTE SOURCES:
     - http://gems.rubyforge.org/
     - http://gems.github.com


大抵は sudo gem install するので、下記のGEM PATHSにインストールされる。

 - /opt/local/lib/ruby/gems/1.8

しかし、sudo を付け忘れると、GEM PATHS のうちインストール可能なPATHに入れてしまうようだ。

 - /Users/hoge/.gem/ruby/1.8

こっちにインストールされてしまう。
しかも、 sudo gem uninstall するときには、/Users/... の方は見てくれないようだ。

まとめ

現象追っかけてみただけで、rubygemsのソースは見てません。
uninstall 時も GEM PATHS を全部検索してくれるといいのになー。