DRb Problems with Mac OS X 10.5.3

K

Kurt Schrader

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
 
E

Eric Ly

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


Eric
 
K

Kurt Schrader

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:~]$ irbSocketError: getaddrinfo: nodename nor servname provided, or not known
from (irb):2:in `getaddrinfo'
from (irb):2
 
J

Jeff Sidlosky

Kurt said:
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.
 
A

Andy Keep

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 said:
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:~]$ irbSocketError: getaddrinfo: nodename nor servname provided, or not known
from (irb):2:in `getaddrinfo'
from (irb):2

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


Eric
 
L

Laurent Sansonetti

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

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 said:
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 said:
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
 
J

Jeff Sidlosky

Laurent said:
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?
 
B

Blaz Rubi

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
=======
 
L

Lorgio Jimenez

Blaz said:
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?
 
L

Lorgio Jimenez

Blaz said:
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.
 
J

Jeff Sidlosky

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

Yeah that doesn't work either.

A) INSIDE config block of environment.rb,

B) Before the "Rails::Initializer.run:)set_load_path)" line in boot.rb.

Neither A or B work.

Any other ideas?

/script/../config/boot.rb:48: uninitialized constant DRb (NameError)
from script/server:2:in `require'
from script/server:2
 
K

Kurt Schrader

Jeff said:
./script/../config/boot.rb:48: uninitialized constant DRb (NameError)
from script/server:2:in `require'
from script/server:2

You forgot to require DRb.
Add require 'drb' right above the code.
 
D

Davis Kitchel

I had the same problems and this fix makes it possible for mongrel to
start and I thought everything was fine.

But, I can't seem to run any background tasks using backgroundrb.

I get

The error occurred while evaluating nil.object - (NoMethodError)
20080604-13:35:57 (4356)
vendor/plugins/backgroundrb/server/lib/backgroundrb/middleman.rb:396:in
`worker'

Line 396 is:
worker = ex { @jobs[key].object }


Anyone else having trouble?
 
R

Ryan Duryea

Davis said:
Anyone else having trouble?

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?
 
R

Ryan Duryea

Ryan Duryea wrote:

Well, I went and got some answers to my own questions!
Is this a problem for those running the version of Ruby included with
Mac OS X as well?

Sure seems like it. Check this out:

% /usr/bin/ruby.orig -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0]

% /usr/bin/ruby.orig -r socket -e "TCPServer.open('localhost', 0)"
-e:1:in `initialize': getaddrinfo: nodename nor servname provided, or
not known (SocketError)
from -e:1:in `open'
from -e:1
Does anyone know if/when this is going to be fixed?

Keep in mind that I have almost no experience with socket programming,
but I have submitted a patch for MacPorts under this ticket. Use at
your own peril! It seems to work for me, but your mileage may vary!

https://trac.macports.org/ticket/15528
 
D

Davis Kitchel

I just thought I'd tell people what I ended up doing to solve the
problem so that they might avoid some of the problems I ran into.

I downgraded to 10.5.0 via my leopard install cd using the preserve
perferences option.

I was hoping it'd leave everything the same, just downgrade the system,
so all my filesystems would be intact (/usr/local/src, bin etc etc.)

Wrong assumption. They were scattered all over a folder that was
created called "Previous System"

At first I thought I could piece it all together, but no way!. It was
like a bomb went off and scattered my development environment all over
the place with no discernible logic.

So

I rebuilt my whole environment from scratch - gems, mysql, ruby, rails,
subversion etc etc etc.

Total nightmare.

If you can find a way to patch the problem until apple fixes it - do.
 
W

Wes Gamble

Jeff said:
Yeah that doesn't work either.

A) INSIDE config block of environment.rb,

B) Before the "Rails::Initializer.run:)set_load_path)" line in boot.rb.

Neither A or B work.

Any other ideas?

./script/../config/boot.rb:48: uninitialized constant DRb (NameError)
from script/server:2:in `require'
from script/server:2

I put it in environment.rb _outside_ of the config block and it works
like a champ.

What a drag -- why didn't I hear about this at RailsConf?

Wes
 
S

Seggy Umboh

Andy said:
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:
SocketError: getaddrinfo: nodename nor servname provided, or not known
.....=> #<DRb::DRbServer:0x383a24 @grp=#<ThreadGroup:0x3839e8>,
.....
 
T

Tony Daly

Having lots of problems with this bug. Tried some of the fixes suggested
in this thread but with no luck. Any idea when we might be getting a
fix?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,967
Messages
2,570,148
Members
46,694
Latest member
LetaCadwal

Latest Threads

Top