Rubyistみたいな

2009-06-11

Ruby 1.9.1で $HOME/.gem/ruby/1.9.1 以下のGemパッケージを使う方法

| 16:38

正しい方法かは知らないけど、とりあえず使うために頑張ってみる。

require "rubygems/custom_require" をする

デフォルトでKernel.#requireを上書きするとかそんなことをやらないようにか、rubygems.rb内で、RUBY_VERSIONが1.9以上の場合はrubygems/custom_requireを読まないようになっています。なのでこいつを明示的に読むようにしてやれば一応は動きます。

Kernel#gem を使う

詳しくはbitclust辺りを参照。

指定された Gem をロードする前にその Gem が必要とする Gem をロードします。バージョン情報を省略した場合は、最も高いバージョンの Gem をロードします。指定された Gem やその Gem が必要とする Gem が見つからなかった場合は Gem::LoadError が発生します。

bitclust

ただ、るりまには上のように書いてあるのですが、バージョン情報を省略したらGem::LoadErrorが発生しました。仕方がないので最新バージョンの Gem をロードするためにひと手間かけました。

spec = Gem.searcher.find "hoge" # "hoge"に使用する Gem の名前を指定する
gem spec.name, "= #{spec.version}"
require spec.name

やっている事は rubygems/custom_require でやっていることと変わりありません。Gem.activateを使うかKernel#gemを使うかの違い。

Gem::QuickLoader.load_full_rubygems_library を使う方法

これはRuby 1.8.x以下でrequire "rubygems"としたのと全く同じ状態になるもの、だと思う。

多分各々が呼ぶべきものではないと思うのだけど、Ruby 1.9.1のソース内を探索していたらこんなものを見つけたので、せっかくなので使ってみる。

yharayhara2009/10/03 17:37trunkの7/30のコミットで、1.9でも普通に~/.gemからロードできるように直っているそうです。
Ruby 1.9.2 (あるいは、1.9.2-preview2) では上記の作業は不要になりますね。

MccadeMccade2016/05/07 16:08The price is certainly right, but I think I have moved on from McAfee in a permanent sense. The antivirus I run now is so far beyond that they were able to offer me, that I cannot see myself ever going ba3c;#82k0&nor would I ever want to.