Help us understand the problem. What is going on with this article?

rails s がうまく動かないときにやったこと

More than 3 years have passed since last update.

Ruby on Rails を使って開発していて、ある日突然 rails s しても立ち上がらなくなるときがあります。
実体験に基づいています。つらい。

rails server が立ち上がるけど何も反応しない

このケースは、

$ rails s

をしてもちゃんとサーバが立ち上がります。しかし、 localhost:3000 とかでアクセスしてみてもログが流れません。
当然、ブラウザには何も表示されない事態が起こります。

このときは

$ ps ax | grep httpd

とかしても apache が動いていることが確認できて、わりとはまりました。
このときは、/etc/hosts

127.0.0.1 localhost # IPv4

がなく、

::1 localhost # IPv6

はだけある状態だったので、 IPv4 の記述をしたところ動くようになりました。

すでに3000番ポートが使われてると怒られる場合。

このときは

$ rails s

とかすると、

adding listener failed addr=0.0.0.0:3000 (in use)
retrying in 0.5 seconds (4 tries left)
adding listener failed addr=0.0.0.0:3000 (in use)
retrying in 0.5 seconds (3 tries left)
adding listener failed addr=0.0.0.0:3000 (in use)
retrying in 0.5 seconds (2 tries left)
adding listener failed addr=0.0.0.0:3000 (in use)
retrying in 0.5 seconds (1 tries left)
adding listener failed addr=0.0.0.0:3000 (in use)
retrying in 0.5 seconds (0 tries left)
adding listener failed addr=0.0.0.0:3000 (in use)
Exiting
/Users/user_name/git/project/vendor/bundle/ruby/2.1.0/gems/unicorn-4.8.2/lib/unicorn/socket_helper.rb:185:in `bind': Address already in use - bind(2) for 0.0.0.0:3000 (Errno::EADDRINUSE)

こんな感じに怒られます。
この場合はたいてい他に rails server が立ち上がってたりするケースが多いので、もう一方の rails server を落とせばいいです。

しかし自分の場合は

$ ps ax | grep ruby
$ ps ax | grep rails

とかやっても実行中のプロセスが見つかりませんでした。
なので、lsof してオープンしてるプロセスをみてみると

$ lsof -i:3000
COMMAND     PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
VBoxHeadl 91045 user_name   19u  IPv4 0xda7db325f97a1df3      0t0  TCP *:hbci (LISTEN)

VirtualBox が生き残ってたようです。 vagrant haltしたのに
そんなわけで動いていた VM を終了させて無事 localhost:3000 でアクセスできるようになりました。
UNIXコマンド知らなさすぎてかなり遠回りしてしまった感があります。。

またいろいろと rails server 周りで嵌まるたびに追加していこうと思います。

akito19
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away