Ruby on Railsのrails serverコマンドでサーバが立ち上がらない原因と対処法

Rubyロゴ

Ruby on Railsの開発をしているとき、ごくまれにあるのが、rails sが実行されなくなるということ。

大概この手の状況は凡ミスによるものが大きかったりするのですが、原因と対処法について書いておきたいと思います!

Ruby on Railsのrails sがうまく実行されない原因でよくあるやつ

Ruby on Railsの開発をローカル環境でやっていて、本当にたまにうっかりやってしまうのが、作業終了時にローカルサーバを切らずにターミナルやPCそのものを閉じてしまうということ。

このとき、ローカルサーバは立ち上がったままになるので、後日同じようにローカル環境でRuby on Railsの開発を行おうと、いざ「rails s」コマンドを実行すると、見事にエラーが出てしまいます。

Address already in use – bind(2) for “0.0.0.0” port 3000

上記のようなエラーメッセージが出てしまうんですね。
要するに「え?あなたもうすでにPORT3000番は使ってるわよ??だから別途使いたいなんて無理よ」といったニュアンスのエラーです。

今回ご紹介したケースに当てはまらない場合もあるとは思うのですが、大抵は上記の過程でrails sが繋がらなくなる、ということが多いです・・・とほほ。

Ruby on Railsのrails sがうまく実行されない場合の対処法

ということで、rails sがうまく効かない場合は、PORT3000を使っているプロセスを強制シャットダウンしてあげる必要があります!

具体的な手順としては

lsof -i :3000

まず、今3000番ポートを使っているものがないかを確認します。
僕が失敗したときの例としては、

ruby 4855 TatsuyaKosuge 19u IPv4 0x7a0a4736a597c945 0t0 TCP *:hbci (LISTEN)

こんな感じの表示がターミナルで出ていました。
前回作業時にruby on railsプロジェクトで3000番ポートを使用したときの状態がまだ残っている、というわけなのです。

上記の場合は、左から2番目の「4855」という数字に注目します。
このプロセスを強制シャットダウンしてあげればOKなので、この数字を活用して

kill -QUIT 4855

とターミナルで実行してあげます。
こうすることで、無事にrails sコマンドが実行できるようになります!

まとめ

ということで、今回はうっかり八兵衛な感じでローカルサーバ閉じずにターミナルやPCを閉じてしまって、rails sが効かないときの対処法についてご説明いたしました!

うっかり八兵衛がないように、気をつけます・・・