「A server is already running...Check...server.pid.」「Address already in use」でRailsのサーバーが起動できなかった時の対処法

【結論】

Railsのサーバーが正常終了しなかった場合、エラーで以降サーバーが正常に起動しなくなる場合がある

A server is already running...Check.../tmp/pids/server.pid.が表示された場合、ターミナルを再起動するか、server.pidを削除する

Address already in use - bind(2) for "0.0.0.0" port 3000が表示された場合、ターミナルでlsof -i:3000を実行し、実行中のプロセスをkillする

【目次】

【本題】

A server is already running

Railsのローカル環境にて、ある処理を実行中にフリーズしてしまい、Ctrl-Cでも終了出来なかったので、ターミナルを強制終了させた事がありました。

その後、再度サーバーを起動させようとすると、以下のエラーが発生し起動出来なくなりました。

-> % rails s
=> Booting Puma
=> Rails 5.2.2 application starting in development 
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
A server is already running. Check C:/project_name/tmp/pids/server.pid.
Exiting

server.pidの削除

一先ず、以下のパスにあるファイルを削除しました

project_name/tmp/pids/server.pid

その後、再度サーバー起動を試みると、別のエラーが発生しました。

Address already in use

それが、こちらのエラーです。

Address already in use - bind(2) for "0.0.0.0" port 3000 (Errno::EADDRINUSE)

3000ポートのプロセスを終了させる

以下のコマンドで3000ポートで実行されているプロセスを確認します。

$ lsof -i:3000

表示された一覧が以下の内容です。

COMMAND     PID             USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Google      356 user   24u  IPv4 0x305890e42aabf4bd      0t0  TCP localhost:50784->localhost:hbci (ESTABLISHED)
Google      356 user   25u  IPv4 0x305890e425d251bd      0t0  TCP localhost:54543->localhost:hbci (ESTABLISHED)
ruby      49186 user   10u  IPv4 0x305890e41f4e14bd      0t0  TCP *:hbci (LISTEN)
ruby      49186 user   30u  IPv4 0x305890e4221deebd      0t0  TCP localhost:hbci->localhost:50784 (ESTABLISHED)
ruby      49186 user   31u  IPv4 0x305890e430bfbb3d      0t0  TCP localhost:hbci->localhost:50846 (CLOSE_WAIT)

この中のrubyと記載されているプロセスを以下のコマンドで強制終了させます。

kill -9 49186

これでRailsのサーバーが起動できる様になりました。

参考情報

A server is already running 対処方法【Rails】 - Qiita

rails sが通らない - DesignAssembler

RubyonRails:rails s実行時にAddress already in useが発生する。。。 - Madogiwa Blog