脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

[Ruby] sinatraがポート4567を指定しても繋がらない

ちょっとはまったのでメモに・・・


Sinatra: README (Japanese)
このsinatraの日本語サイト通りに
gem install sinatraして、
gem install thinして、
myapp.rbを作って、

# myapp.rb
require 'sinatra'

get '/' do
  'Hello world!'
end

起動して、

$ ruby myapp.rb
== Sinatra (v1.4.6) has taken the stage on 4567 for development with backup from Thin
Thin web server (v1.6.3 codename Protein Powder)
Maximum connections set to 1024
Listening on localhost:4567, CTRL+C to stop

よっしゃ楽勝だぜって思ってブラウザからアクセスしても繋がらない・・・

iptable全開放とか、VMのネットワークとか確認しても繋がらない、、でもApacheのrootにはアクセスできる。

ぐぐってみたら、いつからのversionか、開発環境だと書いてある通りに厳密に「localhost:4567」じゃないと繋がらないとのこと。(IPアドレスじゃだめ)
ちなみに私の場合はそれでも繋がらなかったのだが、以下で繋がるようになりました。

解決方法

解決法1 : production 環境だと明示する(オプションで)

$ ruby myapp.rb -e production
.
.
Listening on 0.0.0.0:4567, CTRL+C to stop


解決法2 : IPアドレスを明示してもいいらしいです(オプションで)

$ ruby myapp.rb -o 192.168.33.11
.
.
Listening on 192.168.33.11:4567, CTRL+C to stop


解決法3 : production 環境だと明示する(コードの中で)

# myapp.rb
require 'sinatra'

set :environment, :production # <== これ!!

get '/' do
  'Hello world!'
end

コードに書いておくのが一番簡単かもしれませんね。