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)