rails server が停止できないときの対処法


はじめに

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 を停止する必要がある。

    1. 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) [アプリ名]
      ---- 
      
    2. kill コマンドでこのプロセスを終了する。

      $ kill 31701
      
    3. プロセス番号は次のファイルにも記されている。cat コマンドなどで中身を見る。

      $ cat tmp/pids/server.pid
      31701
      
    4. 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 以外で終了

    1. 誤って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
      
    2. "Ctrl + C をせずにターミナルウィンドウを閉じたとき"と同様にプロセス番号を調べ kill コマンドにオプション -9 をつけて実行する。オプションをつけないとプロセスが終了しないことがある。

      $ kill -9 31701
      

参考記事

Rails serverのプロセスを素早く落とす

以上。