DRb Problems with Mac OS X 10.5.3

Discussion in 'Ruby' started by Kurt Schrader, May 28, 2008.

  1. 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-forum.com/.
     
    Kurt Schrader, May 28, 2008
    #1
    1. Advertising

  2. Kurt Schrader

    Eric Ly Guest

    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-forum.com/.
     
    Eric Ly, May 29, 2008
    #2
    1. Advertising

  3. 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-forum.com/.
     
    Kurt Schrader, May 29, 2008
    #3
  4. 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-forum.com/.
     
    Jeff Sidlosky, May 29, 2008
    #4
  5. Kurt Schrader

    Andy Keep Guest

    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-forum.com/.
     
    Andy Keep, May 29, 2008
    #5
  6. 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 <> 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-forum.com/.
    >
    >
     
    Laurent Sansonetti, May 29, 2008
    #6
  7. Kurt Schrader, May 29, 2008
    #7
  8. 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-forum.com/.
     
    Jeff Sidlosky, May 29, 2008
    #8
  9. Kurt Schrader

    Blaz Rubi Guest

    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-forum.com/.
     
    Blaz Rubi, May 29, 2008
    #9
  10. 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-forum.com/.
     
    Lorgio Jimenez, May 29, 2008
    #10
  11. 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-forum.com/.
     
    Lorgio Jimenez, May 29, 2008
    #11
  12. Lorgio Jimenez wrote:
    >
    > 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
    --
    Posted via http://www.ruby-forum.com/.
     
    Jeff Sidlosky, May 30, 2008
    #12
  13. Jeff Sidlosky wrote:
    > ./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.
    --
    Posted via http://www.ruby-forum.com/.
     
    Kurt Schrader, May 30, 2008
    #13
  14. 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?
    --
    Posted via http://www.ruby-forum.com/.
     
    Davis Kitchel, Jun 4, 2008
    #14
  15. Kurt Schrader

    Ryan Duryea Guest

    Davis Kitchel wrote:

    > 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?
    --
    Posted via http://www.ruby-forum.com/.
     
    Ryan Duryea, Jun 5, 2008
    #15
  16. Kurt Schrader

    Ryan Duryea Guest

    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
    --
    Posted via http://www.ruby-forum.com/.
     
    Ryan Duryea, Jun 6, 2008
    #16
  17. 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.
    --
    Posted via http://www.ruby-forum.com/.
     
    Davis Kitchel, Jun 6, 2008
    #17
  18. Kurt Schrader

    Wes Gamble Guest

    Jeff Sidlosky wrote:
    > Lorgio Jimenez wrote:
    >>
    >> 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


    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

    --
    Posted via http://www.ruby-forum.com/.
     
    Wes Gamble, Jun 7, 2008
    #18
  19. Kurt Schrader

    Seggy Umboh Guest

    Andy Keep 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.



    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
    .....
    >> DRb.start_service('druby://127.0.0.1:0')

    => #<DRb::DRbServer:0x383a24 @grp=#<ThreadGroup:0x3839e8>,
    .....

    --
    Posted via http://www.ruby-forum.com/.
     
    Seggy Umboh, Jun 24, 2008
    #19
  20. Kurt Schrader

    Tony Daly Guest

    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?
    --
    Posted via http://www.ruby-forum.com/.
     
    Tony Daly, Jul 16, 2008
    #20
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Miles Keaton
    Replies:
    3
    Views:
    182
    Miles Keaton
    Mar 30, 2005
  2. Kirk Haines

    More DRb; SSL & DRB & errors

    Kirk Haines, Jul 1, 2005, in forum: Ruby
    Replies:
    0
    Views:
    129
    Kirk Haines
    Jul 1, 2005
  3. G B-)
    Replies:
    1
    Views:
    127
    Michal Suchanek
    Feb 15, 2006
  4. J. Wook
    Replies:
    16
    Views:
    285
    Robert Klemme
    May 16, 2007
  5. Ittay Dror
    Replies:
    1
    Views:
    138
    Ittay Dror
    Oct 21, 2008
Loading...

Share This Page