sci

最果て風呂

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 アクセス機能の逆みたいなやつなのかな?