先生!.devじゃないドメインでPowを使いたいんです!!オフラインでも使いたいんです!!!
うぇっぶえんじにあーならばどこでもコード書きますよね?地下深くをすすむ会社帰りの地下鉄のなか、あるいは昼休みに公園の芝生でくつろぎながらなど。そんなとき、生命線であるインターネットから断絶されてしまうこともあります。すると、残酷にもPowすらも別れを告げてくるのです><
通常ならばPowによって.devドメインでアクセスできるRackアプリも、Pow本体もローカルで動いています。しかしながら、インターネットが断たれてしまうと、正確にはDNSサーバにアクセスできない状態になるとPowは使えなくなってしまいます。/etc/resolv.conf がなくなり、/etc/resolver/dev を参照しなくなってしまうのです*1。そうなってもRackupなりなんなりしてしまえば、ポートを指定してlocalhostにアクセスすれば開発を続けることはできます。できますが、PowのENVが使えなくなりますし、その時だけ別の方法でサーバを起動するのもなんとなく気がすすみませんね。ならば、なんとしても、どんな状況でもPowを使いましょう。ついでに .dev 以外のドメインでPowを使ってみましょう。
任意のドメインで使う
Powで .dev 以外のドメインを使うための設定がPOW_EXT_DOMAINSです。任意のドメインをPOW_EXT_DOMAINSに指定してやることによりPowへ向けることができるのです。ホームディレクトリの .powconfig へ記述します。なければ作りましょう。
% cat ~/.powconfig export POW_EXT_DOMAINS=offline
例として、offline としてみました。これだけではofflineドメインは有効になりませんので、Powを再起動、つまるところ再インストールしましょう。
# Powの再インストール % powder install # 設定されたか確認 % curl -H host:pow localhost/config.json
Pow使うならPowder入れておくだァーッ! - Meltdown Countdown で紹介したPowderをつかっています。
Powの設定をみるにはリクエストヘッダにhost:powをつけてlocalhost/config.jsonにアクセスをします。レスポンスには"extDomains":["offline"]が含まれていることでしょう。
DNSなんてまっぴらだ
これだけでは .offline ドメインがDNSでひけない→アクセスできないままです。そこで良い子の見方、hostsを編集します。
% sudo vim /etc/hosts # 127.0.0.1 appname.offline を追記 % grep offline /etc/hosts 127.0.0.1 sinatra-pow-powder.offline
するとどうでしょう .offline ドメインでもPowを利用してRackアプリにアクセスできています。さらにこれはインターネットから隔絶されても有効なのです!!
まとめ
- POW_EXT_DOMAINS を設定すると、Powで任意のドメインを使える*2
- DNSがひけない状況でPowを使うには/etc/hostsを編集する
- 手作業でやってるのがスマートではないですよね。なにか良い手がないものか・・・
その他、参考
MacOSX限定・Rails3での開発で使える超手間無しサーバ「Pow」 - Back yard : yuya_lush’s report
Powの動作の流れ、なるほどそうなっているのか、と。