今回も時間がかかったぜ!

結論

rackupから起動するには以下でおけ。

RACK_ENV=production bundle exec rackup

もしくは

bundle exec rackup -o 0.0.0.0

足跡

sinatraでローカル環境以外から接続させたい時、検索してみたら大体以下がヒットする。

実行オプションを使う方法

bundle exec ruby app.rb -o 0.0.0.0

environmentを変更する

ソースコードの中で以下を設定する

set :environment, :production

set :bind を設定する

Sinatraのサイトに書いて有る方法。
後々判明しますが、よく読むべきでした。。。

set :bind, '0.0.0.0'

でもダメでした。

上記をいろいろ試したけど、localhost:9292しかlistenしていない模様。。。

sudo lsof -i -P | grep "LISTEN"
〜省略〜
ruby 〜省略〜 TCP localhost:9292 (LISTEN)
ruby 〜省略〜 TCP localhost:9292 (LISTEN)
〜省略〜

解決!

どーしてだろと、sinatraのソース見て気づいた。。。あれ?ポート番号の9292って誰が 設定しているんだろう?と。

自分の場合は rackup から起動していたんですよね。 モジューラースタイルがどうのこうのとか関係なくて、Sinatraのサイトに書いてあった

:bind - server hostname or IP address
String specifying the hostname or IP address of the interface to listen on when the :run setting is enabled.
Sinatra: Configuring Settings

:run設定が有効の時にしかbindは効かないんですね。読むの時間がかかるからって読み飛ばすのは良くないですね。。。。

じゃあ:run設定って何かといえばsinatraの built-in web server の起動設定。
つまり検索して見つかった設定ってこの built-in サーバへの設定なのでした。。。

今回はRackupを使っているので設定が効かないのは当然で、Rackの設定を行えばオッケーです!

あしたこそがんばろう。