ruby1.9.2をインストールしたが、gemがうまく動かない。
gem -v
$ gem -v
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/source_index.rb:68:in `installed_spec_directories': undefined method `path' for Gem:Module (NoMethodError)
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/source_index.rb:58:in `from_installed_gems'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:884:in `source_index'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/gem_path_searcher.rb:81:in `init_gemspecs'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/gem_path_searcher.rb:13:in `initialize'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:842:in `new'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:842:in `block in searcher'
from :10:in `synchronize'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:841:in `searcher'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:480:in `find_files'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:984:in `load_plugins'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:1140:in `'
from :29:in `require'
from :29:in `require'
from /usr/local/bin/gem:8:in `'
いろいろとググってみると、
以下のサイトに詳しい内容があった。
Ruby 1.9.2とRubyGems 1.3.7とGem.pathの消失
詳しく解説してくれていてとても助かった。
で、結局、どこにどういうコード入れれば良いかなんだけど、
まずは、rubygems.rbがどこにあるのかを検索
$find / -name rubygems.rb ※良い子はマネしない! /home/hoge/.gem/ruby/1.9.1/gems/rubygems-update-1.3.7/lib/rubygems.rb /usr/src/ruby/ruby-1.9.1-p0/lib/rubygems.rb /usr/src/ruby/ruby-1.9.2-p0/lib/rubygems.rb /usr/local/src/branches_ruby_1_9_2/lib/rubygems.rb /usr/local/src/ruby/lib/rubygems.rb /usr/local/src/ruby-1.9.2-p0/lib/rubygems.rb /usr/local/lib/ruby/gems/1.9.1/gems/rubygems-update-1.3.7/lib/rubygems.rb /usr/local/lib/ruby/1.9.1/rubygems.rb /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb /usr/lib/ruby/1.9.1/rubygems.rbと、いろいろ弄っているので、 かなりたくさん出てくる。
どのrubygemsが最初にロードされているかを確認
$ruby -e 'p $LOAD_PATH' ["/usr/local/lib/ruby/site_ruby/1.9.1", "/usr/local/lib/ruby/site_ruby/1.9.1/i686-linux", "/usr/local/lib/ruby/site_ruby", "/usr/local/lib/ruby/vendor_ruby/1.9.1", "/usr/local/lib/ruby/vendor_ruby/1.9.1/i686-linux", "/usr/local/lib/ruby/vendor_ruby", "/usr/local/lib/ruby/1.9.1", "/usr/local/lib/ruby/1.9.1/i686-linux"]
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rbがロードされている事がわかった。 中身を見ると、確かに、
Gem::QuickLoader.removeが、無い。
で、
gem_disabled = !defined? Gemの下に以下のコードを、追加
unless gem_disabled # Nuke the Quickloader stuff Gem::QuickLoader.remove endそして再度
$ gem -v 1.3.7はい。おっけー!