こんにちは、tomohiroです。
いつものようにコンソールでrails sとやって、ローカルサーバーを立ち上げようとしましたが、
`start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError)
というエラーが出て、サーバーを立ち上げることができませんでした。
ただ、ググるとすぐに解決方法が分かったので共有します。
エラー内容
>> Thin web server (v1.5.1 codename Straight Razor) >> Maximum connections set to 1024 >> Listening on 0.0.0.0:3000, CTRL+C to stop Exiting /home/***/.rvm/gems/ruby-2.1.9***/gems/eventmachine-1.0.3/lib/***.rb:***:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError) from /home/***/.rvm/gems/ruby-2.1.9***:/gems/eventmachine-1.0.3/lib/***:526rb:***::in `start_server' from /home/***/.rvm/gems/ruby-2.1.9***/gems/thin-1.5.1/lib/thin/backends/***:rb:***:in `connect' from /home/***/.rvm/gems/ruby-2.1.9***/gems/thin-1.5.1/lib/thin/backends/***:rb:55:in `block in start' from /home/***/.rvm/gems/ruby-2.1.9***/gems/eventmachine-1.0.3/lib/***.rb:187:in `call' from /home/***/.rvm/gems/ruby-2.1.9***/gems/eventmachine-1.0.3/lib/***.rb:187:in `run_machine' from /home/***/.rvm/gems/ruby-2.1.9***/gems/eventmachine-1.0.3/lib/***.rb:187:in `run' from /home/***/.rvm/gems/ruby-2.1.9***/gems/thin-1.5.1/lib/thin/backends/***.rb:63:in `start' from /home/***/.rvm/gems/ruby-2.1.9***/gems/thin-1.5.1/lib/thin/***.rb:159:in `start' from /home/***/.rvm/gems/ruby-2.1.9***/gems/rack-1.4.5/lib/rack/handler/***.rb:13:in `run' from /home/***/.rvm/gems/ruby-2.1.9***/gems/rack-1.4.5/lib/rack/***.rb:268:in `start' from /home/***/.rvm/gems/ruby-2.1.9***/gems/railties-3.2.12/lib/rails/commands/server.rb:70:in `start' from /home/***/.rvm/gems/ruby-2.1.9***/gems/railties-3.2.12/lib/rails/commands.rb:55:in `block in <top (required)>' from /home/***/.rvm/gems/ruby-2.1.9***/gems/railties-3.2.12/lib/rails/commands.rb:50:in `tap' from /home/***/.rvm/gems/ruby-2.1.9***/gems/railties-3.2.12/lib/rails/commands.rb:50:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>'
エラーの原因
エラーの原因は、以前にローカルサーバーを立ち上げたプロセスが裏で起動しており、指定のポート番号が既に使用されていることでした。
サーバーを立ち上げ、exitせずにコンソールを閉じてしまうと、ポートが使用されたままの状態になり、指定されたポート番号でサーバーが立ち上がった状態となってしまっていたのです。
そのため、エラー文の中にあるように「Exiting 〜中略〜 port is in use or requires root privilege」という表示になっています。
解決コマンド
① ps ax | grep railsで立ち上がっているrailsのプロセスを確認
② kill -9 △△△ で裏で立ち上がってしまっていたプロセスをkill(※△△△の箇所はプロセスの番号を指定)
③ プロセスがkillされたのを確認し、rails s でサーバー起動
プロセスを確認した際の表示内容
[xxxxxx@localhost xxxxxx]$ ps ax | grep rails △△△△△△ ??? ?? 0:00 /home/xxx/.rvm/rubies/ruby-2.1.9/bin/ruby script/rails s xxxxxx ??? ?? 0:00 grep rails [xxxxxx@localhost xxxxxx]$ kill -9 △△△△△△ [xxxxxx@localhost xxxxxx]$ ps ax | grep rails xxxxxx ??? ?? 0:00 grep rails
今回のエラーの学び
サーバーを立ち上げられない場合、既に立ち上がっているプロセスを確認してみるということを学びました。
(これまで同様のエラーの際に、わざわざPCを再起動していたのがアホらしい、、)