[ruby-list:50681] DRb friend

From: emo@...
Date: 2018-07-09 07:08:28 UTC
List: ruby-list #50681
Ruby 1.8 で書かれた DRb を使うプログラムを
Ruby 2.4 で動かしたところ、下記のような例外
が発生したのですが、どのように対処すればよいのでしょうか?

 def dump()
     @q = DRbObject.new_with_uri(CalcQueue::URI) #サーバーに接続
     calcCommand = @q.getCalcCommand() # <-- ここで以下のような例外が発生


/usr/local/rbenv/versions/2.4.3/lib/ruby/2.4.0/drb/drb.rb:579:in `load': 
connection closed (DRb::DRbConnError)
         from /usr/local/rbenv/versions/2.4.3/lib/ruby/2.4.0/drb/drb.rb:641:in 
`recv_reply'
         from /usr/local/rbenv/versions/2.4.3/lib/ruby/2.4.0/drb/drb.rb:941:in 
`recv_reply'
         from /usr/local/rbenv/versions/2.4.3/lib/ruby/2.4.0/drb/drb.rb:1254:in 
`send_message'
         from /usr/local/rbenv/versions/2.4.3/lib/ruby/2.4.0/drb/drb.rb:1142:in 
`block (2 levels) in method_missing'
         from /usr/local/rbenv/versions/2.4.3/lib/ruby/2.4.0/drb/drb.rb:1229:in 
`open'
         from /usr/local/rbenv/versions/2.4.3/lib/ruby/2.4.0/drb/drb.rb:1141:in 
`block in method_missing'
         from /usr/local/rbenv/versions/2.4.3/lib/ruby/2.4.0/drb/drb.rb:1160:in 
`with_friend'
         from /usr/local/rbenv/versions/2.4.3/lib/ruby/2.4.0/drb/drb.rb:1140:in 
`method_missing'
         from ./calc_queue_client.rb:47:in `dump'
         from ./calc_queue_client.rb:136:in `<main>'


ここで、クライアントが呼び出している、リモートオブジェクトのメソッド 

getCalcCommand()
は別のリモートオブジェクトのインスタンスを返す
メソッドです。

とりあえず、サーバ側で以下のように safe_level を 1 から 0
に変更することで動くようになりましたが、例外の所で with_friend
というメソッドを呼び出そうとしているところがわかりません。
friend とはどのように定義すればよいのでしょうか?

safe_level を下げないようにする方法はあるのでしょうか?


#DRb.start_service(CalcQueue::URI, $q, :safe_level => 1)
DRb.start_service(CalcQueue::URI, $q, :safe_level => 0)


江本


Attachments (1)

smime.p7s (3.91 KB, application/pkcs7-signature)

In This Thread

Prev Next