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'
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'
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'
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
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:
···
from :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:
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'
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:
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'
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.
Looks to me like this might not be the reason, as I was able to get it
to work by using 127.0.0.1 instead of localhost:
require 'drb'
=> true
DRb.start_service('druby://localhost:0')
SocketError: getaddrinfo: nodename nor servname provided, or not known
.....
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
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
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?
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.
Looks like this has re-surfaced in 10.6 (Snow Leopard). Fresh install
and I can't start drb with localhost. Using the hack above fixes the
problem for now, but just though I'd mention it.
Yes. I'm having problems with backgroundrb too, even with the hack.
I'm running Ruby out of MacPorts and it looks like a lot of others in
this thread are too.
Is this a problem for those running the version of Ruby included with
Mac OS X as well? Looks like Lorgio Jimenez was running into some
problems using Mac OS X's Ruby.
Does anyone know if/when this is going to be fixed?