「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