2009-06-11
Ruby 1.9.1で $HOME/.gem/ruby/1.9.1 以下のGemパッケージを使う方法
Rubygems |
正しい方法かは知らないけど、とりあえず使うために頑張ってみる。
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のソース内を探索していたらこんなものを見つけたので、せっかくなので使ってみる。
トラックバック - http://rubyist.g.hatena.ne.jp/from_kyushu/20090611
リンク元
- 176 http://rubyist.g.hatena.ne.jp/
- 51 https://www.google.co.jp/
- 35 http://ujihisa.blogspot.com/2009/06/rubygems-best-practice.html
- 33 http://d.hatena.ne.jp/kitamomonga/20090605/ruby_rubygems_bins_install_to_user_dir
- 25 http://rubyist.g.hatena.ne.jp/diarylist
- 22 http://d.hatena.ne.jp/takuya_1st/20091215/1260875102
- 12 http://d.hatena.ne.jp/from_kyushu/20090115/1232009143
- 9 http://d.hatena.ne.jp/from_kyushu/
- 9 http://d.hatena.ne.jp/from_kyushu/20081005/1223181603
- 7 http://d.hatena.ne.jp/from_kyushu/20090924/1253802026
Ruby 1.9.2 (あるいは、1.9.2-preview2) では上記の作業は不要になりますね。