【結論】
・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時間!」