WEBrick doesn't work (permission/port error)

Discussion in 'Ruby' started by P. A., Dec 7, 2009.

  1. P. A.

    P. A. Guest

    Hi.

    I get an error when I start a WEBrick server.

    Here's my application.

    # server.rb
    # encoding: utf-8

    require 'webrick'

    class Server
    class << self
    def start(config = {})
    config.merge:)BindAddress => '0.0.0.0', :port => 4321)
    server = WEBrick::HTTPServer.new(config)
    trap('INT') { server.shutdown }
    end
    end
    end

    Server.start

    $ ruby1.9.2dev server.rb
    [2009-12-08 00:21:53] INFO WEBrick 1.3.1
    [2009-12-08 00:21:53] INFO ruby 1.9.2 (2009-11-14) [i686-linux]
    [2009-12-08 00:21:58] WARN TCPServer Error: Permission denied - bind(2)
    [2009-12-08 00:21:58] WARN TCPServer Error: Permission denied - bind(2)
    /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/utils.rb:73:in `initialize':
    Permission denied - bind(2) (Errno::EACCES)
    from /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/utils.rb:73:in
    `new'
    from /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/utils.rb:73:in
    `block in create_listeners'
    from /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/utils.rb:70:in
    `each'
    from /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/utils.rb:70:in
    `create_listeners'
    from /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/server.rb:74:in
    `listen'
    from /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/server.rb:62:in
    `initialize'
    from
    /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/httpserver.rb:24:in
    `initialize'
    from server.rb:24:in `new'
    from server.rb:24:in `start'
    from server.rb:31:in `<main>'

    When I start it as a root I get another error.

    # ruby1.9.2dev server.rb
    [2009-12-08 00:26:18] INFO WEBrick 1.3.1
    [2009-12-08 00:26:18] INFO ruby 1.9.2 (2009-11-14) [i686-linux]
    [2009-12-08 00:26:23] WARN TCPServer Error: Address already in use -
    bind(2)

    I also get these errors while I use a stable version of Ruby (1.9.1). I
    haven't got any other applications working on port 4321.

    Debian GNU/Linux 5.0.3;
    Ruby 1.9.1, 1.9.2dev;
    WEBrick 1.3.1.

    What is the reason of this bug?

    Thanks.
    --
    Posted via http://www.ruby-forum.com/.
     
    P. A., Dec 7, 2009
    #1
    1. Advertising

  2. P. A.

    Luis Lavena Guest

    On Dec 7, 6:34 pm, "P. A." <> wrote:
    > Hi.
    >
    > I get an error when I start a WEBrick server.
    >
    > Here's my application.
    >
    > # server.rb
    > # encoding: utf-8
    >
    > require 'webrick'
    >
    > class Server
    >   class << self
    >     def start(config = {})
    >       config.merge:)BindAddress => '0.0.0.0', :port => 4321)
    >       server = WEBrick::HTTPServer.new(config)
    >       trap('INT') { server.shutdown }
    >     end
    >   end
    > end
    >
    > Server.start
    >
    > $ ruby1.9.2dev server.rb
    > [2009-12-08 00:21:53] INFO  WEBrick 1.3.1
    > [2009-12-08 00:21:53] INFO  ruby 1.9.2 (2009-11-14) [i686-linux]
    > [2009-12-08 00:21:58] WARN  TCPServer Error: Permission denied - bind(2)
    > [2009-12-08 00:21:58] WARN  TCPServer Error: Permission denied - bind(2)
    > /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/utils.rb:73:in `initialize':
    > Permission denied - bind(2) (Errno::EACCES)
    >         from /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/utils.rb:73:in
    > `new'
    >         from /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/utils.rb:73:in
    > `block in create_listeners'
    >         from /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/utils.rb:70:in
    > `each'
    >         from /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/utils.rb:70:in
    > `create_listeners'
    >         from /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/server.rb:74:in
    > `listen'
    >         from /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/server.rb:62:in
    > `initialize'
    >         from
    > /opt/ruby-1.9.2-dev/lib/ruby/1.9.1/webrick/httpserver.rb:24:in
    > `initialize'
    >         from server.rb:24:in `new'
    >         from server.rb:24:in `start'
    >         from server.rb:31:in `<main>'
    >
    > When I start it as a root I get another error.
    >
    > # ruby1.9.2dev server.rb
    > [2009-12-08 00:26:18] INFO  WEBrick 1.3.1
    > [2009-12-08 00:26:18] INFO  ruby 1.9.2 (2009-11-14) [i686-linux]
    > [2009-12-08 00:26:23] WARN  TCPServer Error: Address already in use -
    > bind(2)
    >
    > I also get these errors while I use a stable version of Ruby (1.9.1). I
    > haven't got any other applications working on port 4321.
    >
    > Debian GNU/Linux 5.0.3;
    > Ruby 1.9.1, 1.9.2dev;
    > WEBrick 1.3.1.
    >
    > What is the reason of this bug?
    >


    Is not a bug, it clearly indicates that another process/server is
    already bound to that port.

    Please verify that your script wasn't running in the background or you
    using a port that is already in use by other program/service.

    --
    Luis Lavena
     
    Luis Lavena, Dec 8, 2009
    #2
    1. Advertising

  3. P. A.

    P. A. Guest

    I solved it by myself.

    The problem was that I stated a WEBrick server without initial
    configuration because I used the Hash#merge method instead Hash#merge!
    (mutator).

    So, the code should be changed to work properly.

    # IT DOESN'T WORKS!
    # encoding: utf-8

    require 'webrick'

    class Server
    class << self
    def start(config = {})
    config.merge:)BindAddress => '0.0.0.0', :port => 4321) # the error
    source
    puts config # returns {} on start
    server = WEBrick::HTTPServer.new(config)
    trap('INT') { server.shutdown }
    server.start
    end
    end
    end

    # WORKS!
    # encoding: utf-8

    require 'webrick'

    class Server
    class << self
    def start(config = {})
    config.merge!:)BindAddress => '0.0.0.0', :port => 4321) # changes
    the config hash
    puts config # returns {:BindAddress => '0.0.0.0', :port => 4321}
    on start
    server = WEBrick::HTTPServer.new(config)
    trap('INT') { server.shutdown }
    server.start
    end
    end
    end

    Cheers!
    --
    Posted via http://www.ruby-forum.com/.
     
    P. A., Dec 8, 2009
    #3
    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. Lloyd Zusman
    Replies:
    2
    Views:
    404
  2. Sam Roberts
    Replies:
    11
    Views:
    258
    GOTOU Yuuzou
    Mar 23, 2005
  3. John N. Alegre

    Changing port for WEBrick ???

    John N. Alegre, Feb 18, 2006, in forum: Ruby
    Replies:
    2
    Views:
    174
    Shashank Date
    Feb 18, 2006
  4. Pavel Smerk
    Replies:
    3
    Views:
    143
    Michal Suchanek
    Aug 15, 2006
  5. Aaron Smith

    WEBrick::Daemon and WEBrick

    Aaron Smith, Mar 9, 2007, in forum: Ruby
    Replies:
    2
    Views:
    317
    Aaron Smith
    Mar 18, 2007
Loading...

Share This Page