Search code examples
rubyapachesinatraeventmachine

cannot start sinatra process - eventmachine "no acceptor"


I have a Sinatra app that I run as a daemon, using Apache port-forwarding to mediate between port 80 and port 7655. This has been working fine in the past. Today, not so well. I cannot figure out why.

Problem: sudo ruby my_process.rb returns:

/var/lib/gems/1.9.1/gems/eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError)

Tried: updating all system packages, updating all gems. No help (except for the more clear error message from eventmachine).

When I run sudo lsof -i :7655 I get nothing back. When I run sudo ps aux I don't see any Ruby processes at all. Which I find highly irregular, given the nature of the error message!

So is there something I'm missing in finding out why the port is unavailable?


Also:

Tried changing ports, nothing. I wonder if it is related to "localhost"? When I ping localhost I get all dropped packets. That doesn't seem normal.


Solution

  • Turns out these two lines in the main Sinatra script provided the most information:

    set bind: "localhost"
    set port: 7655
    

    The problem was with localhost. The loopback interface was not properly configured. ifconfig showed the lo interface, but it hadn't been assigned the IP 127.0.0.1. To resolve, ran the following commands in the shell (on an Ubuntu Linux system):

    ifdown lo
    ifup lo