[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で運用するのをお勧めします。