From: Eric Hodel Date: 2006-12-08T06:44:04+09:00 Subject: Re: NoMethodError in protocol.rb On Dec 7, 2006, at 02:30 , Paul Lutus wrote: > Alex Young wrote: >> Does this look familiar to anyone? >> >> NoMethodError: undefined method `+' for nil:NilClass at >> /usr/local/lib/ruby/1.8/net/protocol.rb:176:in `write0' >> >> I'm getting it sporadically during some fairly heavy XMLRPC >> traffic. It >> doesn't make very much sense to me, because write0 looks like this: >> >> def write0(str) >> @debug_output << str.dump if @debug_output >> len = @io.write(str) >> @written_bytes += len # <= line 176 >> len >> end >> >> The error must mean that @written_bytes is nil. It's only called >> from >> within a block passed to writing, which looks like this: >> >> def writing >> @written_bytes = 0 >> @debug_output << '<- ' if @debug_output >> yield > > You aren't showing us the block to which this yield refers. Does > that block > modify @written_bytes? Irrelevant. #write0 is the code you are looking for. >> @debug_output << "\n" if @debug_output >> bytes = @written_bytes >> @written_bytes = nil >> bytes > > Okay, here you are modifying the @written_bytes class variable There are no class variables here, only instance variables. > , assigning it nil, and this is likely to be the problem. Can I ask > why you are using an instance variable here rather than a method- > local one? Can't this need be met by a local variable? This is from protocol.rb. See #write0 above for why an instance variable in necessary. -- Eric Hodel - drbrain@segment7.net - http://blog.segment7.net I LIT YOUR GEM ON FIRE!