起きた現象
ターミナルでいつもどおり「rails s」コマンドでローカルサーバーを立ち上げようと思ったら以下のエラーが出た。
A server is already running. Check /Users/terashimatakaya/projects/chat-app/tmp/pids/server.pid.
「サーバーはすでに動いています」と指摘されました。
解決①
ご指摘のパスにあるserver.pidファイルを削除し、もう一度「rails s」を実行。
すると、、、
(略) Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
またエラー。
どうやら http://localhost:3000 のアドレスで使っているポート番号がすでに使われているということらしい。
ポート番号を3000以外の3001とかに指定する方法も見つかりましたが、根本解決にならないので別の方法で解決します。
解決②
ググって以下のコマンドを見つけたので実行。
terashimatakaya@MacBook-Air chat-app % ps ax | grep rails
49845 s003 S+ 0:00.01 grep rails
terashimatakaya@MacBook-Air chat-app % kill -9 49845
kill: kill 49845 failed: no such process
1つ目のコマンドで実行中のプロセスを検索し、処理を止めるようkillコマンドを実行。
→「そんなプロセスはないぜ?」と指摘されました。
解決③
もう少しググって以下のコマンドを実行したら無事にサーバーが動き出しました!
terashimatakaya@MacBook-Air chat-app % lsof -i :3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 48924 terashimatakaya 12u IPv4 0xedd14d7d782588d1 0t0 TCP localhost:hbci (LISTEN)
ruby 48924 terashimatakaya 13u IPv6 0xedd14d7d73022519 0t0 TCP localhost:hbci (LISTEN)
ruby 48924 terashimatakaya 25u IPv6 0xedd14d7d77b10b79 0t0 TCP localhost:hbci->localhost:58238 (CLOSE_WAIT)
terashimatakaya@MacBook-Air chat-app % kill -QUIT 48924
今の時点では「実行中のプロセスのPID番号を指定して処理を停止した」くらいの理解ですが、そもそものエラーの原因はサーバーが起動したままターミナルを終了したことだと思います。
今後はサーバーは必ず「Ctr + C」でストップさせてからターミナルを終了するようにします!