Not every Rails app is run on port 3000, if you're fortunate enough to be managing more than one application over the course of your work you may well have a server boot script.
#!/bin/bash rails server -b 0.0.0.0 --port=7000 -u puma
Running apps on 3000, 4000, 5000, 6000, 7000, and beyond. That's plenty of apps. And then one day you get...
Address already in use - bind(2) for "0.0.0.0" port 7000 (Errno::EADDRINUSE)
You'd be forgiven for thinking that you're already running the app in another tab, that's happened before. Nope...
Well, we can netstat
and take a look. This is a trimmed down result.
rl@Robs-MacBook-Pro-2 someapp % netstat -ant | grep LISTEN tcp6 0 0 *.5000 *.* LISTEN tcp4 0 0 *.5000 *.* LISTEN tcp6 0 0 *.7000 *.* LISTEN tcp4 0 0 *.7000 *.* LISTEN tcp4 0 0 *.443 *.* LISTEN tcp4 0 0 *.80 *.*
Yep it's running as well as something else on port 5000. 443 and 80 (that's puma-dev
). So ports 5000, 7000 are running even though I know the apps that are assigned those ports aren't.
Well, I won't keep the suspense. It's Apple AirPlay. If you go to System Preferences > Sharing, you'll it running.
Untick that.
rl@Robs-MacBook-Pro-2 someapp % netstat -ant | grep LISTEN tcp4 0 0 *.443 *.* LISTEN tcp4 0 0 *.80 *.*
And now our app boots unhindered.
rl@Robs-MacBook-Pro-2 someapp % ./bin/server => Booting Puma => Rails 6.1.7 application starting in development => Run `bin/rails server --help` for more startup options [DEPRECATED] ActiveSupportBackports should no longer be needed. Please remove! Puma starting in single mode... * Puma version: 5.4.0 (ruby 2.7.6-p219) ("Super Flight") * Min threads: 5 * Max threads: 5 * Environment: development * PID: 18359 * Listening on http://0.0.0.0:7000 Use Ctrl-C to stop
Top comments (0)