• 46
    Like
  • 1
    Comment
More than 1 year has passed since last update.

pow + rbenvで手軽なRack環境構築

MacOSXでRack環境をlocalに手軽に準備するものとして pow があるのですが、これを brewで構築する方法を紹介します。

インストール

node.jsnpmがインストールされてない場合は別途必要となります。まだ入れてない場合には brew経由の場合には以下のようにすることでインストール出来ます。

$ brew install nodejs 
$ export NODE_PATH=/usr/local/lib/node_modules 
$ curl http://npmjs.org/install.sh | sh

NODE_PATH を .bashrc などに追加しておくことを忘れないようにしてください。

そしてpowのインストールもbrewを使うのであれば手軽に実行出来ます。5ステップで終わります。また brew install pow 以降のステップは brew info pow で確認出来ます。

$ brew install pow
$ sudo pow --install-system
$ pow --install-local
$ sudo launchctl load -w /Library/LaunchDaemons/cx.pow.firewall.plist
$ launchctl load -w ~/Library/LaunchAgents/cx.pow.powd.plist

環境設定

(2012/07/30 追記はじめ)

MoutainLionでインストールをしたところ、POW_HOST_ROOT が作成されないようですので、以下のステップが必要になりました。

$ eval $(pow --print-config)
$ mkdir  "`echo $POW_HOST_ROOT`" 

(2012/07/30 追記おわり)

brew経由だと ~/.pow が作成されないので、別途作成する必要がありますが、以下の2ステップで終わります。(2012/07/20時点)

$ eval $(pow --print-config)
$ ln -s "`echo $POW_HOST_ROOT`" ~/.pow

インストール確認

以下のコマンドで {"pid":20226,"version":"0.4.0","requestCount":3} のような表示が出ることを確認してください。表示されれば正常に動作しています。
エラーが出る場合は web共有がonになってないかチェックしてください。

$ curl -H Host:pow http://localhost/status.json

(2012/07/30 追記はじめ)

MoutainLionでインストールをしたところ、上記コマンドが Empty reply from server とエラーを返すようになりました。現時点で対策は分かりません。その代わり次のコマンドで /System/Library/CoreServices/powerd.bundle/powerd が表示されることを確認してください。

$ ps ax|grep -i pow

(2012/07/30 追記おわり)

動かし方

以下の2ステップです。

$ cd ~/.pow
$ ln -s /path/to/rackapp

これでRackアプリの最後のPath名が例えば rackapp であるならば、 http://racpapp.dev でアクセス出来るようになります。

$ open http://rackapp.dev

rbenvとの連携について

特に必要なく動かせますが、 もし動作しないようならrbenvが動作している環境で

$ echo "export PATH=$PATH" >> ~/.powconfig

とすることで解決出来るかもしれません。
また、 rbenv local 1.9.3-p194 等とすることで、そのディレクトリ以下では指定したバージョンが動作するようです。

3rd party tools

次に pow を便利に利用するために Powder をインストールします。似たツールに PowifyShowoff などもありますが、お好きなものを選んでください。
ここでは powder を紹介します。

$ gem install powder
$ rbenv rehash

これらのツールを利用することで、インターネットコネクションが無い場合にはDNSにつながらないなどの理由で接続に失敗しする場合などに、/etc/hostspow で利用するホスト名を更新することで回避出来るのですが、これを手軽に利用することができます。

powderでは以下のコマンドで行えます。

$ powder host        # /etc/hosts に powで利用するホスト名を追加
$ powder unhost      # /etc/hosts に powで利用するホスト名を削除

powの一覧は以下で確認出来ます。

$ powder list

他、powのプロセスを再起動する場合には以下で行えます。

$ sudo powder respawn 

以下のコマンドでは Rack環境下でのみ実行できますが、それぞれステータス、Rack再起動、ログ表示が行えます。他にも便利な機能があるのでヘルプを見てください
(ただし、powderコマンドによるpowのインストール、アンインストールなどはbrew経由では無いので実施はしない方が良いと思われます)

$ powder status
$ powder restart
$ powder applog

Q&A(らしきもの)

Q. 何が嬉しいの?
A. ブラウザで独自ドメイン(デフォルトでは.dev)で見れるようになりcookieなどもRackアプリごとに分ける必要が無くなります。

Q. メモリたくさん使うのでは?
A. アクセスしてから暫くの間のみプロセスが起動する事から影響は軽微だと思われます。

Q. トップレベルドメインは .dev 固定?
A. 例えば.testを使いたい場合には .powconfigexport POW_DOMAINS=test として、powder respawnpowの再起動を行い、もし /etc/resolver 以下にファイルが有る場合はその名前をtestにリネーム。また/ets/hostspowのホスト名が存在している場合には powder host/etc/hosts を更新をすることで対応可能です。

Q. 手軽?
A. たぶん手軽です。