なんかほってんとりめーかーがうまく動いてないような...。
DRb::GWがよくできててびっくり。わたし、すげー。
druby.orgのDripサーバは「drbunix:/home/seki/.drip/port」というUNIXドメインソケットで動いてます。UNIXドメインなのでそのマシンからでないと触れないはずです。
でさ、ふつうは手元のMacBookからdruby.orgのDripのデータを処理してみたいなーと思うじゃん?幸福の王子本の最後に紹介されてるDRb::GWの節を、ほんとに読みながら解決しました。
require 'drb/drb' require 'drb/gw' DRb.install_id_conv(DRb::GWIdConv.new) drip = DRbObject.new_with_uri('drbunix:' + File.expand_path('~/.drip/port')) DRb::DRbServer.new('druby://localhost:54321', DRb::GW.new) ro = DRbObject.new(DRb.front) ro[:drip] = drip DRb.thread.join
DRb::GWIdConvとDRb::GWの組で使います。GWIdConvはDRbObjectを取り出すときに細工する係で、RMIがこのプロセスを経由するように書き換えます。GWはふつうのHashに排他制御をつけた程度の簡単なもので、なくてもまあ動きます。RMI経由でDRb::GWに設定されたDRbObjectを取り出すとき、取り出しのRMIを担当したDRbServerを経由するようにDRbObjectがラップされます。
$ ssh -L 54321:localhost:54321 seki@www.druby.org ... $ ruby tgw.rb
のようにsshでポートフォワーディングして、さっきのスクリプトを実行。
手元のマシンからirbして
$ irb -r drb irb(main):001:0> gw = DRbObject.new_with_uri('druby://localhost:54321') => #<DRb::GW:0x8252bfc> irb(main):002:0> drip = gw[:drip] => #<Drip:0x8384f98> irb(main):003:0> k, v = drip.head[0] => [1304969714891437, {"id_str"=>"67674004709838848", "text"=>"....
あー、うごいたうごいた。