咳といいます。

drb-1.3.1をリリースします。RAAを更新しftp.netlab.co.jpにputしました。

変更点は次の通り。

* リモート側のScriptErrorを捕捉するようにした
* DRbUnknownが不完全だったので修正した

DRbUnknownはかなりマイナーな機能なので説明します。
DRbUnknownはMarshal.loadできないときに作られるオブジェクトです。
DRbUnknwonをdumpしてloadすると、load時にもとのオブジェクトを
復元できるか試みます。

DRbUnknownのうれしいところは、例えばコンテナ(集合?)担当のプロセスが
具のクラスを知らなくてもよいところです。

  * queue.rb -- キュー管理だけ
  * who.rb --   クラスWhoの定義
  * whor.rb --  キューからWhoを取り出す。require 'who'してる。
  * whow.rb --  キューにWhoを積む。require 'who'してる。

従来は queue.rb が require 'who' しないと Who を知らないために
値渡しでやってきたWhoをMarshal.loadできなかったのです。
DRbUnknownはこの辺をごまかしてくれます。

--- queue.rb
require 'drb/drb'
require 'thread'

uri = ARGV.shift || raise("usage: #{0} <URI>")

DRb.start_service(uri, Queue.new)
puts '[return] to exit.'
gets

--- who.rb
class Who
  def initialize(name)
    @name = name
  end
  attr_reader :name
end

--- whor.rb
require 'drb/drb'
require 'who'

uri = ARGV.shift || raise("usage: #{$0} <URI>")

DRb.start_service
queue = DRbObject.new(nil, uri)
p queue.pop # => Who

--- whow.rb
require 'drb/drb'
require 'who'

begin
  uri = ARGV.shift || raise
  name = ARGV.shift || raise
rescue
  puts "usage: #{$0} <URI<name>"
  exit 2
end

DRb.start_service
queue = DRbObject.new(nil, uri)
queue.push(Who.new(name))