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

f:id:ryoutaku_jo:20190815022025p:plain

【結論】

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

《今日の学習進捗(3年以内に10000時間に向けて)》

・バリデーションについて
レビュー時に気づいた事だが、日付のフォームに異常に長い年数を入力すると、ポスト作成時にフリーズする問題が発生した。
日付のフォームは、開始年と終了年の差から、年単位でプルダウンを作成するが、異常に長い年数を入力すると作成すべき項目数が多すぎてフリーズしてしまう様だった。
現在は、年数を4桁以内に制限するバリデーションを設定して解消している。

今回の様に、SQLインジェクションなどをせずとも、異常値を入力することで、システム障害を引き起こせる余地があるということを改めて認識した。
ユーザーが4桁以上の年数を入力することは、通常考えられないが、悪意を持ったユーザーが異常値を入力する可能性が無いとは言えないので、バリデーションを設定する際は、そういったことも考慮する必要があると感じている。

・CKEditorのリファクタリング
画像やHTMLなどの読み込み部分がかなり見通しが悪かったので、リファクタリングを行った。
フロント周りに技術に疎い事が原因で見通しを良くする手段が思いつかなかったが、フロントチームの方にアドバイス頂いたことで、割と短時間で解決する事が出来た。
作業全般に言えるかもしれないが、フロントに関しては、早々にフロントに詳しい人へ相談した方が、無駄に時間を消費せずに済むと改めて実感した。
作業を効率的に進める為にも、自力での調査は時間を区切って行う様に徹底していきたい。

・UI/UXの取り組み
CTOにUI/UXのレビューをして頂いた際、各機能に対する説明が不足しており、分かりづらいという指摘を頂いた。
開発過程で何度も操作を繰り返しているので、利便性に対する評価が甘くなっていると改めて実感した。
開発ばかりに注力していると、どうしてもユーザー目線を忘れてしまいがちなので、その点は常に意識して開発に取り組みたい。

学習開始からの期間 :250日
今日までの合計時間:2368h
一日あたりの平均学習時間:9.5h
今日までに到達すべき目標時間:2283h
目標との解離:85h
「10,000時間」まで、

残り・・・「7632時間!」