ローカルサーバー起動できない!時の対処法


Ruby on Railsでpictweetのアプリケーション作成中。
ローカルサーバーを再起動しようと思ったが "cotroll + c"を入力しても反応なし。
ターミナルを強制終了し、再度立ち上げてから "rails s"を入力。

すると、エラー発生。
”Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)”
とのことで、なにやら3000番のポートが使用中だそうだ(よくわかってない)。

「ターミナルを再起動した時にローカルサーバーが立ち上がらない」
という状況である。

サーバーを終了しないままターミナルを閉じた時に生じる現象らしい。

色々調べた結果、

1、lsofコマンドでポートで実行中のファイルを確認する
2、そのファイルをkillコマンドで削除する

という手順で解決した。

1、lsofコマンドでポートで実行中のファイルを確認する

$ lsof -i :3000

今回は3000番ポートなので、最後の数字を3000で入力。
結果が↓

COMMAND  PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
ruby    8376 SHIGEDEEN   13u  IPv4 0xa2239c9f9d219327      0t0  TCP localhost:hbci (LISTEN)
ruby    8376 SHIGEDEEN   14u  IPv6 0xa2239c9f85859677      0t0  TCP localhost:hbci (LISTEN)
ruby    8376 SHIGEDEEN   25u  IPv6 0xa2239c9f92497157      0t0  TCP localhost:hbci->localhost:58898 (CLOSE_WAIT)
ruby    8376 SHIGEDEEN   27u  IPv6 0xa2239c9f7cc60a37      0t0  TCP localhost:hbci->localhost:58871 (CLOSE_WAIT)
ruby    8376 SHIGEDEEN   28u  IPv6 0xa2239c9f6f09fb37      0t0  TCP localhost:hbci->localhost:58879 (CLOSE_WAIT)
ruby    8376 SHIGEDEEN   29u  IPv6 0xa2239c9f9040b777      0t0  TCP localhost:hbci->localhost:58885 (CLOSE_WAIT)

ここで、PID接続しているものを消せばよいらしい。

2、実行中ファイルをkillコマンドで削除する

というわけで 8376 を killコマンドで消します。

kill -QUIT 8376

または、

kill -QUIT <PID>

これで、サーバーを再起動することができるようになりました。

参考文献

今回参考にさせていただいた記事はこちら👇
(ローカルサーバを停止せずにターミナルを閉じてしまいました。:http://song-of-life.hatenablog.com/entry/2017/02/02/204010)
(げ!ローカルサーバーを切らずにターミナルを消しちゃった!:https://qiita.com/nagao_norihiro/items/aba40bd4e0eac9f9a92d)

ちなみに、lsofコマンドは他にも有用な使い道があるようだ。
(lsofコマンド入門:https://qiita.com/hypermkt/items/905139168b0bc5c28ef2)