Windowsマシンで動かしているSinatraアプリにほかのマシンからアクセスできなくてハマった

おおよその事情はタイトルの通り。
Windows マシンで Sinatra アプリを動かす。

^o^ > rackup config.ru

ポート 9292 で待機するので、ほかのマシンからアクセスするも繋がらない。ローカルホストからだとちゃんと繋がるので、アプリのせいではない……と思ったら、これが大間違いだった。

最初、ファイアウォールのせいだと思って Norton Internet Security のポート開放方法とかをググって試してみたけど、どうやっても繋がらない。
さんざんやったあげく、ふと Sinatra で同じ目にあってる人がいるかと思って「ruby sinatra ポート」でググったら、次のページを見つけた。

 cf. Sinatraがデフォルトでは外部から繋がらなくなってたよ – Qiita

なんてこった。Sinatra 1.4.0 から development 環境ではデフォルトでローカルホストからしかアクセスを受け付けなくなったようだ。
ともあれ、原因と解決法が分かった。次のようしてどのホストからのアクセスも受け付けるようにすればいい。

^o^ > rackup -o 0.0.0.0 config.ru

これで無事OK。

新しいPCが届いたのでWindowsを消してUbuntuをインストールした

今日一日かけて作業した。Ubuntu 16.04 LTS。ホスト名は muffinman。
宅内ネットワークの Webサーバ用。apostrophe(旧nightschool)で動かしていた Sinatra アプリ2つを移設。いくつかハマりどころがあったけど、なんとか終わった。
ホントはちゃんと作業記録を残しておくべきなんだろうけど、覚えていないので書けない。まあ、うまくいったからいいか。

Ubuntu:ホスト名を変更する

/etc/hostnameの変更

直接編集してもいいけど hostname コマンドで変更できる。

takatoh@nightschool $ hostname
nightschool
takatoh@nightschool $ sudo hostname apostrophe
[sudo] password for takatoh:

/etc/hostsの変更

127.0.0.1	localhost
127.0.0.1	apostrophe   # <- ここを変更

192.168.1.12    valarie

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

ネットワークの再起動

takatoh@nightschool $ sudo /etc/init.d/networking restart
takatoh@nightschool $ hostname
apostrophe

これで完了。
/etc/hosts を書き換えてから出ないとネットワークを再起動したときにエラーが出る。

takatoh@nightschool $ sudo /etc/init.d/networking restart
sudo: ホスト apostrophe の名前解決ができません

ちなみに、プロンプトのホスト名が変わってないけど、これは端末を起動し直すとちゃんと変更が反映される。

[追記]

上記の通りで OK かと思ったら、完全じゃなかった。OS を再起動したらホスト名が戻ってしまった。

takatoh@nightschool $ hostname
nightschool

hostnamectl コマンドで見ると:

takatoh@nightschool $ hostnamectl
   Static hostname: nightschool
         Icon name: computer-desktop
           Chassis: desktop
           Boot ID: 2026269b5ed74ccab65e1a806d7e231f
  Operating System: Ubuntu 14.04.4 LTS
            Kernel: Linux 3.13.0-85-generic
      Architecture: x86_64

hostnamectl コマンドで変更する。

takatoh@nightschool $ sudo hostnamectl set-hostname apostrophe
takatoh@nightschool $ hostnamectl
   Static hostname: apostrophe
         Icon name: computer-desktop
           Chassis: desktop
           Boot ID: 2026269b5ed74ccab65e1a806d7e231f
  Operating System: Ubuntu 14.04.4 LTS
            Kernel: Linux 3.13.0-85-generic
      Architecture: x86_64

参考ページ:

 cf. ホスト名を設定する