From: drbrain@...7.net Date: 2016-02-22T18:30:12+00:00 Subject: [ruby-core:73932] [Ruby trunk Feature#12101] Add verbose failure messages and avoid infamous DRb::DRbConnError Issue #12101 has been updated by Eric Hodel. I think printing out messages to $stdout is not the best way. If I'm running DRb as a server I may have no way of seeing these and knowing if it is a problem. Better, I think, would be to allow a user to configure a callback or logger that is invoked when an error on the client side is discovered. See also https://rubygems.org/gems/drbdump which gives you tcpdump-like views of communications amongst drb peers. ---------------------------------------- Feature #12101: Add verbose failure messages and avoid infamous DRb::DRbConnError https://bugs.ruby-lang.org/issues/12101#change-57083 * Author: Michael Yagudaev * Status: Open * Priority: Normal * Assignee: ---------------------------------------- Avoid the generic "DRb::DRbConnError" which gives very little information and make errors hard to debug. When I stared using DRuby, I kept getting a strange and cryptic error message `DRb::DRbConnError 'connection closed'`. Turns out it was due to some silly mistake on the server side of the relationship. It took hours to figure out. The only way I was able to do it was to patch ruby drb after closely studying the source. Others have had the same issues: http://stackoverflow.com/questions/27293817/ruby-connection-closed-drbdrbconnerror https://www.ruby-forum.com/topic/193984 https://github.com/Mon-Ouie/pry-remote/issues/8 Here is an example where this makes a difference: ```ruby # drb_server.rb require 'drb' class FrontObject def foo # generates Runtime Exception of Insecure Operation result = `ls -l` end end DRb.start_service("druby://localhost:8787", FrontObject.new, safe_level: 3) DRb.thread.join ``` ``` ruby # drb_client.rb require 'drb' object = DRbObject.new_with_uri("druby://localhost:8787") puts object.foo ``` Output before patch is applied: ``` $ ruby drb_server.rb ``` ``` $ ruby drb_client.rb /Users/mike/.rbenv/versions/2.2.3/lib/ruby/2.2.0/drb/drb.rb:578:in `load': connection closed (DRb::DRbConnError) ``` Output after patch is applied: ``` $ ruby drb_server.rb Insecure operation ``' at level 3 ``` ``` $ ruby drb_client.rb /Users/mike/.rbenv/versions/2.2.3/lib/ruby/2.2.0/drb/drb.rb:578:in `load': connection closed (DRb::DRbConnError) ``` Original issue and proposed solution started on github: https://github.com/ruby/ruby/pull/1260 -- https://bugs.ruby-lang.org/ Unsubscribe: