LoginSignup
11
9

More than 3 years have passed since last update.

Rails server(Rails s)が再起動できない! 問題内容と解決法について

Last updated at Posted at 2019-11-26

Rails server(以下、Rails s)に関する、バグが発生しましたので、内容と解決法を以下に纏めます。
皆様の参考になれば、幸いです。

問題内容

-内容:
Rails sを再起動しようとしたところ、既にサーバーがあり起動できないという問題
-背景/詳細:
binding.pry使用中、exit!・ctrl+c等をコマンドしてもなぜかループから抜けられない。
=>ターミナルを消してrails sを再起動して使用を試みる。
=>既にサーバーがあるとの文言があり、起動できないとのこと。

以下のような状況でした。

terminal
rails s
=> Rails 5.0.7.2 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
A server is already running. 

解決方法

結論、lsofコマンドを使用し、該当のPIDをキルして解消しました。
詳細を以下に記載していきます。

lsofコマンドを使用して状況を確認

今回はlocalhost:3000使用していたので、$ lsof -i:3000と記載してチェックします。
以下のように「34139」が既に存在していることがわかります。
このタスクが切れてないのが問題の原因であることが、明白になりました。

terminal
$ lsof -i:3000
COMMAND    PID    USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
ruby      34139  
ruby      34139 

該当のPID番号をキルして解消

それでは上記で確認できたタスクを削除します。

terminal
$ kill 34139

*念のため、再度状況を確認。何も動いていない状況であることが確認できました。
これで、再度「rails s」を使用することができます。
*上記でまだプロセスを終了できていない場合は、以下のように「−9」を追記して試してみてください。

terminal
$ kill -9 34139
terminal
$ lsof -i:3000

因みに。。lsofコマンドについて

今回使用したlsofコマンドについて、調べてみましたので、以下に記載しておきます。
詳細は参照ページを確認頂けますと幸いです。

オプション 意味
-a 複数のオプションを指定した際に、AND(かつ)の意味で機能させる
-P ポート番号をサービス名に変換しない
-c プロセス名を指定する
-i ネットワークソケットファイルを指定する
-n IPアドレスを表示する(名前解決しない)
-p プロセスIDを指定する
-u ユーザー名を指定する
項目 意味
COMMAND 実行されているコマンド名
PID プロセスID
USER ユーザー名
FD ファイルディスクリプタ
TYPE 種類
DEVICE デバイス
SIZE/OFF ファイルサイズ
NODE iノード番号(プロトコル)
NAME ファイル

以上となります。最後までご覧いただき、ありがとうございました!
今後も学習した事項に関してQiitaに投稿していきますので、よろしくお願いします!
記述に何か誤りなどございましたら、お手数ですが、ご連絡いただけますと幸いです。

参照

Linux基本コマンドTips一覧
https://www.atmarkit.co.jp/ait/articles/1904/18/news033.html

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9