経緯:
railsを使ってサーバを起動する際に時々直面するエラーなので何が起こっているエラーなのかと対処法をまとめてみようと思いました。
間違いがあればご指摘いただければ嬉しいです。
エラー内容
$ rails s
=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
Exiting
--省略--
Address already in use - bind(2) for "::1" port 3000 (Errno::EADDRINUSE)
記のエラーAddress already in use - bind(2) for "::1" port 3000
に着目して頂くとポート3000はすでに使われていますよと警告されているのが分かります。
では、この3000のポートを使っているプロセスを見つけてあげて接続を切ってあげれば解決できそうですね。
ポートを使用しているプロセスを見つけて接続を切る
#port:3000を使用している実行中のプロセスを見つける
$ lsof -i :3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 50404 a-33 32u IPv4 0x6a977ba10ee7a7a1 0t0 TCP *:hbci (LISTEN)
com.docke 50404 a-33 34u IPv6 0x6a977ba0ec0720e1 0t0 TCP localhost:hbci (LISTEN)
lsofコマンドとは
プロセスが開いているファイルを表示するコマンド
-i
オプションでネットワークソケットの指定をすることができます。
(今回ははport:3000を指定しています)
PID
というのがプロセスIDになります。
#PIDを指定してポートを切る
$ kill -9 [PIDの番号]
-9
オプションは強制的にという意味があります。
なので指定したプロセスを強制的に切ってくれます。
最後に、立ち上がるか確認
$ rails s
=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
成功です。