[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

DRb Problems with Mac OS X 10.5.3

Kurt Schrader

5/28/2008 10:18:00 PM

It looks like the Mac OS X 10.5.3 upgrade breaks DRb when it's trying to
open a TCPSocket.

Looking into it now, but be warned:

/opt/local/lib/ruby/1.8/drb/drb.rb:865:in `initialize': getaddrinfo:
nodename nor servname provided, or not known (SocketError)
from /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `open'
from /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `open_server'

-Kurt
--
Posted via http://www.ruby-....

20 Answers

Eric Ly

5/28/2008 11:24:00 PM

0

I'm running into the same problem too having just upgraded. Is there a
solution?


Eric

Kurt Schrader wrote:
> It looks like the Mac OS X 10.5.3 upgrade breaks DRb when it's trying to
> open a TCPSocket.
>
> Looking into it now, but be warned:
>
> /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `initialize': getaddrinfo:
> nodename nor servname provided, or not known (SocketError)
> from /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `open'
> from /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `open_server'
>
> -Kurt

--
Posted via http://www.ruby-....

Kurt Schrader

5/29/2008 12:04:00 AM

0

No solution yet, but it looks like something has changed in some
underlying networking library, as base socket handing methods seem to be
broken:

[kschrader@einstein:~]$ irb
>> require 'socket'
=> true
>> Socket.getaddrinfo(Socket.gethostname, 0, Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)
SocketError: getaddrinfo: nodename nor servname provided, or not known
from (irb):2:in `getaddrinfo'
from (irb):2
>>


Eric Ly wrote:
> I'm running into the same problem too having just upgraded. Is there a
> solution?
>
>
> Eric
>
> Kurt Schrader wrote:
>> It looks like the Mac OS X 10.5.3 upgrade breaks DRb when it's trying to
>> open a TCPSocket.
>>
>> Looking into it now, but be warned:
>>
>> /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `initialize': getaddrinfo:
>> nodename nor servname provided, or not known (SocketError)
>> from /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `open'
>> from /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `open_server'
>>
>> -Kurt

--
Posted via http://www.ruby-....

Jeff Sidlosky

5/29/2008 12:41:00 AM

0

Kurt Schrader wrote:
> No solution yet, but it looks like something has changed in some
> underlying networking library, as base socket handing methods seem to be
> broken:
>


Damn, I need a fix bad -- Either that or I'm re-installing my entire OS
X machine to get rid of 10.5.3.

I'll help anyway I can, but I'm not good with the underlyings.

Please let us know as soon as you find something.
--
Posted via http://www.ruby-....

Andy Keep

5/29/2008 5:11:00 AM

0

I've not done too much Ruby socket programming, but it seems to be that
it doesn't like 0 as a service number, because it is interpreting it as
the real service 0, instead of the empty service... if you use nil
instead it works fine... you might be able to patch dRb to use that as a
work around.


irb(main):001:0> require 'socket'
=> true
irb(main):011:0> Socket.getaddrinfo(Socket.gethostname, 0,
Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)
SocketError: getaddrinfo: nodename nor servname provided, or not known
from (irb):11:in `getaddrinfo'
from (irb):11
from :0
irb(main):012:0> Socket.getaddrinfo(Socket.gethostname, nil,
Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)
=> [["AF_INET", 0, "192.168.1.95", "192.168.1.95", 2, 1, 6]]


Kurt Schrader wrote:
> No solution yet, but it looks like something has changed in some
> underlying networking library, as base socket handing methods seem to be
> broken:
>
> [kschrader@einstein:~]$ irb
>>> require 'socket'
> => true
>>> Socket.getaddrinfo(Socket.gethostname, 0, Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)
> SocketError: getaddrinfo: nodename nor servname provided, or not known
> from (irb):2:in `getaddrinfo'
> from (irb):2
>>>
>
>
> Eric Ly wrote:
>> I'm running into the same problem too having just upgraded. Is there a
>> solution?
>>
>>
>> Eric
>>
>> Kurt Schrader wrote:
>>> It looks like the Mac OS X 10.5.3 upgrade breaks DRb when it's trying to
>>> open a TCPSocket.
>>>
>>> Looking into it now, but be warned:
>>>
>>> /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `initialize': getaddrinfo:
>>> nodename nor servname provided, or not known (SocketError)
>>> from /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `open'
>>> from /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `open_server'
>>>
>>> -Kurt

--
Posted via http://www.ruby-....

Laurent Sansonetti

5/29/2008 6:01:00 AM

0

Thanks for the report, we are of course very sorry about that. Ruby
didn't change in Mac OS X 10.5.3, so we are currently investigating
possible regressions in the underlying frameworks. We will let you
know.

Following Andy's idea, what about the following as a temporary fix?
Seems to work for DRb servers with a port of 0 (which seems to be the
default). Apparently DRb servers which explicitly bind to a non 0 port
are not affected by this regression.

class DRb::DRbTCPSocket
class << self
alias parse_uri_orig parse_uri
def parse_uri(*args)
ary = parse_uri_orig(*args)
ary[1] = nil if ary[1] == 0
ary
end
end
end

Laurent

On Wed, May 28, 2008 at 10:11 PM, Andy Keep <akeep@robotman.org> wrote:
> I've not done too much Ruby socket programming, but it seems to be that
> it doesn't like 0 as a service number, because it is interpreting it as
> the real service 0, instead of the empty service... if you use nil
> instead it works fine... you might be able to patch dRb to use that as a
> work around.
>
>
> irb(main):001:0> require 'socket'
> => true
> irb(main):011:0> Socket.getaddrinfo(Socket.gethostname, 0,
> Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)
> SocketError: getaddrinfo: nodename nor servname provided, or not known
> from (irb):11:in `getaddrinfo'
> from (irb):11
> from :0
> irb(main):012:0> Socket.getaddrinfo(Socket.gethostname, nil,
> Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)
> => [["AF_INET", 0, "192.168.1.95", "192.168.1.95", 2, 1, 6]]
>
>
> Kurt Schrader wrote:
>> No solution yet, but it looks like something has changed in some
>> underlying networking library, as base socket handing methods seem to be
>> broken:
>>
>> [kschrader@einstein:~]$ irb
>>>> require 'socket'
>> => true
>>>> Socket.getaddrinfo(Socket.gethostname, 0, Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)
>> SocketError: getaddrinfo: nodename nor servname provided, or not known
>> from (irb):2:in `getaddrinfo'
>> from (irb):2
>>>>
>>
>>
>> Eric Ly wrote:
>>> I'm running into the same problem too having just upgraded. Is there a
>>> solution?
>>>
>>>
>>> Eric
>>>
>>> Kurt Schrader wrote:
>>>> It looks like the Mac OS X 10.5.3 upgrade breaks DRb when it's trying to
>>>> open a TCPSocket.
>>>>
>>>> Looking into it now, but be warned:
>>>>
>>>> /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `initialize': getaddrinfo:
>>>> nodename nor servname provided, or not known (SocketError)
>>>> from /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `open'
>>>> from /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `open_server'
>>>>
>>>> -Kurt
>
> --
> Posted via http://www.ruby-....
>
>

Kurt Schrader

5/29/2008 6:36:00 AM

0

Laurent,

That seems to work for now. Thanks for looking into it.

-Kurt

--
Posted via http://www.ruby-....

Jeff Sidlosky

5/29/2008 7:58:00 AM

0

Laurent Sansonetti wrote:
> class DRb::DRbTCPSocket
> class << self
> alias parse_uri_orig parse_uri
> def parse_uri(*args)
> ary = parse_uri_orig(*args)
> ary[1] = nil if ary[1] == 0
> ary
> end
> end
> end

Where does this wonderful piece of code go?
--
Posted via http://www.ruby-....

Blaz Rubi

5/29/2008 8:09:00 AM

0

I put this just before "Rails::Initializer.run(:set_load_path)" in
config/boot.rb

=======
# HACK
require 'drb'
class DRb::DRbTCPSocket
class << self
alias parse_uri_orig parse_uri
def parse_uri(*args)
ary = parse_uri_orig(*args)
ary[1] = nil if ary[1] == 0
ary
end
end
end
=======
--
Posted via http://www.ruby-....

Lorgio Jimenez

5/29/2008 3:13:00 PM

0

Blaz Rubi wrote:
> I put this just before "Rails::Initializer.run(:set_load_path)" in
> config/boot.rb
>
> =======
> # HACK
> require 'drb'
> class DRb::DRbTCPSocket
> class << self
> alias parse_uri_orig parse_uri
> def parse_uri(*args)
> ary = parse_uri_orig(*args)
> ary[1] = nil if ary[1] == 0
> ary
> end
> end
> end
> =======

Anyone else get errors from inserting this code?

if you place it in the LINE before
"Rails::Initializer.run(:set_load_path)" I got a syntax error

script/server:2:in `require': ./script/../config/boot.rb:41: class
definition in method body (SyntaxError)
from script/server:2

which makes sense.


if you place it outside of the Boot Class you get a SystemStackError

/script/../config/boot.rb:43:in `parse_uri_orig': stack level too deep
(SystemStackError)
from ./script/../config/boot.rb:43:in `parse_uri_orig'
from /Users/lorgio/Sites/gawkk/config/boot.rb:43:in `parse_uri'
from
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/drb/drb.rb:874:in
`uri_option'
from
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/drb/drb.rb:780:in
`uri_option'
from
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/drb/drb.rb:778:in
`each'
from
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/drb/drb.rb:778:in
`uri_option'
from
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/drb/drb.rb:1044:in
`initialize'
from
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/session/drb_store.rb:8:in
`new'
... 51 levels...
from /Library/Ruby/Gems/1.8/gems/rails-2.0.2/lib/commands/server.rb:39
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:27:in `require'
from script/server:3


Anyone get this working?
Am I placing this in the wrong place? or is there something I missed?
--
Posted via http://www.ruby-....

Lorgio Jimenez

5/29/2008 4:16:00 PM

0

Blaz Rubi wrote:
> I put this just before "Rails::Initializer.run(:set_load_path)" in
> config/boot.rb
>
> =======
> # HACK
> require 'drb'
> class DRb::DRbTCPSocket
> class << self
> alias parse_uri_orig parse_uri
> def parse_uri(*args)
> ary = parse_uri_orig(*args)
> ary[1] = nil if ary[1] == 0
> ary
> end
> end
> end
> =======

Incase you get errors and cannot get the hack above, try putting it in
the environment.rb file INSIDE the config block.

--
Posted via http://www.ruby-....