Pow は便利
悩みがある
sinatra アプリが増えてきて、それぞれのディレクトリに移動していちいち rackup -p xxxx
をするのが面倒になってきた。調べてみると、Pow というものが良いみたい。各ブログや紹介記事から推察すると、流行したのは 2011 年後半のようで、現在のバージョンは 0.5.0 (2014年10月16日) となっていた。
解決のための作業
とりあえず解説にしたがってコマンドを入力していく。インストールをする部分はかなりの時間がかかった。ネットワークが遅いのか、何かビルドをしているのか……。
curl get.pow.cx | sh cd ~/.pow ln -s ~/projects/rackapp1 ln -s ~/projects/rackapp2 ...
(今更ながらだが)自分が常用している Rack アプリは 5 つあった。ブラウザで http://rackapp1.dev
にアクセスしてみると無事に動作をしていた。
解説記事によると、別途 Node が必要であったり、マシンの再起動をしないといけないケースがあるらしいのだが、自分の場合は大丈夫だった(インストール時に必要なものを入れてくれたのかな?)。更新は 2014 年 10 月で止まっているのだけれど、十分に枯れているということなんだろうね。
めちゃくちゃ効果がある!
ブラウザへのアドレス入力が localhost:9292
ではなく、rackapp1.dev
のようにできるので便利そう。一意になるからブックマークもしておける!
ちなみにアンインストールをする場合は、下記のようにすれば良いらしい(インストール時に表示された)。
curl get.pow.cx/uninstall.sh | sh
これで余分なターミナルを開かなくても良くなったぞ。
Rack アプリの再起動についてはちょっと面倒な感じ。再起動したいアプリのディレクトリに入って
touch tmp/restart.txt
とするそうだ。ここはあまりスマートじゃないね。だけれども、自分の場合はもう頻繁に更新する部分はないので、問題は無さそう。開発中のやつは今までのように rackup すれば良いのだから。
tmp/always_restart.txt
ファイルを使う方法もあるらしい。これ、リクエスト毎にリスタートしてくれるらしいけど、負荷的にどうなんだろう?あと、Pow 本体を再起動させるには
touch ~/.pow/restart.txt
とするそうだ。
感謝
何も難しいことをせずに望みが叶いました。開発者や記事を書いて紹介してくれた人達には感謝です。ありがとうございます。
追記
画像閲覧のアプリがうまく動かないぞ……。
Error starting application Your Rack app raised an exception when Pow tried to run it. Error: ENOTDIR, stat '/Users/N/rackapp1/public/photos/2015/img.jpg/view'
というエラーが出る。パスの関係なのかな?検索してみると Node に関係するエラーっぽいのだけれど。自分のアプリの作り方が悪かったんだろうか?
'/Users/N/rackapp1/public/photos/2015/img.jpg/view' ↓ '/Users/N/rackapp1/public/photos/2015/view/img.jpg'
のようなパスとなるようにしたらうまくいくようになった。具体的には sinatra のルーティング記述を変更して、コンテンツを作成する関数も上記のパスとなるように変更。これでうまくいった。Node はパスの途中にピリオドがあるとダメなのかもしれんね。
この変更をしても 'rackup' で起動した場合で問題がなかった。ちなみにアプリの再起動には touch ~/.pow/restart.txt
の方法を取った。restart.txt
は自動的に消されるので、消されていれば Pow の再起動がなされている証拠。
(restart.txt
のタイムスタンプをみてうんぬんと書かれていたけれど、仕様が変更になったんだね。コマンド的に使える。自分がどこにいても使える)
疑惑
サーバをいちいち起動しなくて便利になったのだけれど、スマホや他のマシンからアクセスができなくて不便になってしまった。しかしここも良く考えられていて、例えばアプリ名が rackapp1
で、自分の開発マシンの家内 LAN の IP Adress が 192.168.0.10
だったとすると、http://rackapp1.192.168.0.10.xip.io/
にアクセスすることで使えるようになる。
自分の場合、はじめて試行した時にアクセスができなかったのだけれど、
システム環境設定...
→ セキュリティとプライバシー
→ ファイアウォールオプション...
→ node について「外部からの接続を許可」
のようにするとアクセスができるようになった。速度的には家内 LAN で使っているのと変わらない速度がある。
xip.io
というグローバルなところからアクセスができるようにしているのなら、赤の他人でも自分のアプリを表示できるようになっているのでは?と思って、スマホを LTE 回線にしてアクセスし直してみた。何かアクセスできひんようになってしも〜た。一例ではあるけれども「赤の他人から覗かれる心配」はなさそうだね。
しかしどういう仕組みになってるんだろうね?Buffalo の NAS がやってるような Web アクセス機能の逆みたいなやつなのかな?