LoginSignup
0
0

rails sをしたままターミナルを閉じてしまってA server is already running.が出る時の対処法

Posted at

解決法手順

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を実行することができるはずです。

参考記事はこちら

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0