[ruby-list:50682] Re: DRb friend

From: Masatoshi SEKI <m_seki@...>
Date: 2018-07-09 11:55:01 UTC
List: ruby-list #50682
咳といいます。

とても長い間dRubyを使ってくれてありがとうございます。

たしか、friendは一つのプロセスで複数のDRbServerを持つケースで、
同じプロセス内でそれぞれのURIのオブジェクトのメソッドを呼び合う場合への対応です。
通常の使用では素通しです。

質問のソースコードが少なかったのでirbで実験してみました。

[teminal1]
 % irb -r drb
irb(main):001:0> DRb.start_service('druby://localhost:54321', ENV, :safe_level => 1)
=> ...

[teminal2]
 % irb -r drb
irb(main):001:0> ro = DRbObject.new_with_uri('druby://localhost:54321')
=> #<DRb::DRbObject:0x00007faf29093258 @uri="druby://localhost:54321", @ref=nil>
irb(main):002:0> ro.size
=> 25
irb(main):003:0> ro['PATH']
Traceback (most recent call last):
       11: from /usr/local/bin/irb:11:in `<main>'
       10: from (irb):3
        9: from /usr/local/lib/ruby/2.6.0/drb/drb.rb:1143:in `method_missing'
        8: from /usr/local/lib/ruby/2.6.0/drb/drb.rb:1163:in `with_friend'
        7: from /usr/local/lib/ruby/2.6.0/drb/drb.rb:1144:in `block in method_missing'
        6: from /usr/local/lib/ruby/2.6.0/drb/drb.rb:1232:in `open'
        5: from /usr/local/lib/ruby/2.6.0/drb/drb.rb:1145:in `block (2 levels) in method_missing'
        4: from /usr/local/lib/ruby/2.6.0/drb/drb.rb:1257:in `send_message'
        3: from /usr/local/lib/ruby/2.6.0/drb/drb.rb:944:in `recv_reply'
        2: from /usr/local/lib/ruby/2.6.0/drb/drb.rb:640:in `recv_reply'
        1: from /usr/local/lib/ruby/2.6.0/drb/drb.rb:578:in `load'
DRb::DRbConnError (connection closed)

[terminal1]
#<Thread:0x00007fa73f848b20@/usr/local/lib/ruby/2.6.0/drb/drb.rb:1587 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
	2: from /usr/local/lib/ruby/2.6.0/drb/drb.rb:1591:in `block in perform'
	1: from /usr/local/lib/ruby/2.6.0/drb/drb.rb:1640:in `perform_without_block'
/usr/local/lib/ruby/2.6.0/drb/drb.rb:1640:in `[]': Insecure operation - [] (SecurityError)


おそらく質問のプログラムもサーバー側でSecurityErrorが出ているのではないかと想像します。
経験上、safe_level = 0で運用するのをお勧めします。




In This Thread