解決法手順
rails s
をしている状態で、誤ってターミナルを閉じた後に”rails s”コマンドを実行したら、
「A server is already running. Check/Users/asakura/KiZUKAI_project/kizukai_mvp/tmp/pids/server.pid.」
が出てしまいました。
エラーメッセージ "server is already running" は、既に別のRailsサーバーが同じポートで実行中であることを示しています。このエラーを解決するには、いくつかのステップを踏んで再び同じポートでサーバーを起動することができるようになります。
1. 'server.pid'ファイルの削除
以下のコードでエラーが発生しているpidファイルを削除する。この場合は"/Users/asakura/KiZUKAI_project/kizukai_mvp/tmp/pids/server.pid."
rm /Users/asakura/KiZUKAI_project/kizukai_mvp/tmp/pids/server.pid.
2. 「Address already in use」のエラーが発生してしまう
再度「rails s」を実行すると、今度は別のエラーが発生します。最後の行で「Address already in use – bind(2) for “127.0.0.1” port 3000 (Errno::EADDRINUSE)」のエラーが発生してしまう。
別のポートでサーバーを起動する場合は
rails s -p 3200
のようにポート番号を指定することで、このエラーは回避できます。
しかし、慣れ親しんだポート3000でどうしてもサーバーを起動したい場合は以下のステップを踏む必要があります。
[lsof -i:3000]コマンドで3000ポートの使用状況を確認
$ lsof -i:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 268504 moto 13u IPv4 68224 0t0 TCP localhost:3000 (LISTEN)
ruby 268504 moto 14u IPv6 68225 0t0 TCP ip6-localhost:3000 (LISTEN)
ruby 268504 moto 25u IPv6 68293 0t0 TCP ip6-localhost:3000->ip6-localhost:50578 (CLOSE_WAIT)
ruby 268504 moto 27u IPv6 69661 0t0 TCP ip6-localhost:3000->ip6-localhost:33754 (CLOSE_WAIT)
ruby 268504 moto 29u IPv6 68298 0t0 TCP ip6-localhost:3000->ip6-localhost:32898 (CLOSE_WAIT)
killコマンドで3000ポートで使用されているプロセスの削除
kill -9 PID
今回の場合は、PIDの番号が「268504」なので
kill -9 268504
killコマンドを実行したら再度「lsof -i:3000」を実行します。先程のrubyプロセスが削除されていれば成功です。
これで再度rails s
を実行することができるはずです。
参考記事はこちら