production.log

ピクスタ株式会社でエンジニアのマネージャーをやっている星直史のブログです。

EC2上でrails4.2.1のWebrickを起動後、tcp port 3000番でアクセスできなかった時の対応

概要

新たなサービスを立ち上げるならRubyもRailsも最新が良いよね〜ということで、

  • Ruby 2.2.2
  • Rails 4.2.1

で環境を作り、Webrickを起動してhttp://#{ip}:3000でアクセスしよ〜と思ったところ、
なぜか、アクセスできなかったので、その時の対応方法を書きます。

結果から言いますと

Rails 4.2系から、rails sを実行すると、デフォルトlocalhostしか受け付けなくなるので、
rails s -b 0.0.0.0とオプションを指定すると外部からアクセスできるようになります。

紆余曲折しました

EC2で構築しているもんで、最初ははいはいSecurity groupsの設定でしょ知ってるとか思ってたけど、思いっきり3000番空いてたのではまりました。

だいぶはまったんですが、下記コマンドでピーーーンときました。

$ lsof -i:3000
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby    1545 ec2-user    9u  IPv4  13515      0t0  TCP localhost.localdomain:hbci (LISTEN)

ここのNAMEがlocalhost.localdomain:hbci (LISTEN)となってたんでついでに下記コマンドでも確認

$ netstat -tanp | grep LISTEN
tcp        0      0 127.0.0.1:3000              0.0.0.0:*                   LISTEN      2151/ruby

外部からアクセスできないのは、localhostで動いてるからなのだと確認。

/etc/sysconfig/iptablesとか色々疑ったけど、デフォルト設定がlocalhostになっていただけでした。

$ rails s -d -b 0.0.0.0

$ netstat -tanp | grep LISTEN
tcp        0      0 0.0.0.0:3000                0.0.0.0:*                   LISTEN      1652/ruby

$ lsof -i:3000
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby    1702 ec2-user    9u  IPv4  14009      0t0  TCP *:hbci (LISTEN)