はじめに
Railsチュートリアルを進めているときに rails server が起動できないことがありました。
結論として、rails serverを終了していたつもりが終了できておらず、起動しっぱなしだったため新たに起動することができないということでした。
備忘録としてrails server終了できていないケースと、終了させる方法をまとめました。
動作環境
- Windows10 (64bit)
- WSL(Ubuntu 18.04.4 LTS)
- ruby 2.7.1
- Rails 6.0.3.2
rails server が停止できなくなったとき
-
Ctrl + C をせずにターミナルウィンドウを閉じたとき
ターミナルを閉じてもrails serverはバックグラウンドで動いている。
そのため、下記手順でserver を停止する必要がある。
-
ps コマンドにオプション aux をつけて rails server のプロセス番号を調べる。
最後のCOMMAND 項目が Rails アプリ名のプロセスが該当プロセス。$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ---- hoge 31701 15.0 0.2 1095324 70456 tty15 Sl 12:00 0:01 puma 4.3.4 (tcp://localhost:3000) [アプリ名] ----
-
kill コマンドでこのプロセスを終了する。
$ kill 31701
-
プロセス番号は次のファイルにも記されている。cat コマンドなどで中身を見る。
$ cat tmp/pids/server.pid 31701
-
psの結果をパイプでgrepに渡すとプロセスを探すのが楽
$ ps aux | grep アプリ名 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND hoge 31701 15.0 0.2 1095324 70456 tty15 Sl 12:00 0:01 puma 4.3.4 (tcp://localhost:3000) [アプリ名] hoge 243 0.0 0.0 14804 1188 tty25 S 14:15 0:00 grep --color=auto アプリ名
- Ctrl + C 以外で終了
-
誤ってCtrl + Z等で終了したとき、一見終了したように見えるがRails serverは稼働したままである。
$ rails s => Booting Puma => Rails 6.0.3 application starting in development => Run `rails server --help` for more startup options Puma starting in single mode... * Version 4.3.4 (ruby 2.7.1-p83), codename: Mysterious Traveller * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://127.0.0.1:3000 * Listening on tcp://[::1]:3000 Use Ctrl-C to stop ^Z [1]+ Stopped rails s
-
"Ctrl + C をせずにターミナルウィンドウを閉じたとき"と同様にプロセス番号を調べ kill コマンドにオプション -9 をつけて実行する。オプションをつけないとプロセスが終了しないことがある。
$ kill -9 31701
参考記事
以上。