MacOSX限定・Rails3での開発で使える超手間無しサーバ「Pow」

MacOSXRailsの開発をしている方にちょっと朗報。普通Railsで開発をしているとき、自分用の開発サーバをローカルで

$ rails s

とコマンドを打ち、使っているかと思います。
これをやると3000番のポートで開発中のアプリがdevelopmentモードで立ち上がり、そこにブラウザでアクセスして閲覧、結果を踏まえて修正・・・という流れです。

こうしていると何が困るかというと

  1. サーバを自分でいちいち立上げないといけない
  2. 別のアプリも開発サーバを上げるとなると、ポートをずらさないといけない
  3. 開発用Webサーバ、Webrickは割りと重いので上げっぱなしにしておけない
  4. かといってApacheやNginxを使うとなると、設定ファイルをいちいち修正したりが必要

とかという感じです。(まぁ、それほど辛い悩みでもないのですけど)

ということで、37Signalsの新プロジェクト「Pow」をご紹介。
Pow: Zero-configuration Rack server for Mac OS X

こいつの売りは

Pow is a zero-config Rack server for Mac OS X. Have it serving your apps locally in under a minute.

つまり、設定は不要で1分以内にサーバをローカルに立ててあげましょうと。

実際、上記のURLで公開されているScreencast(動画)を見たところ、大変スカッと立ち上がってました。
うむ、これは良いかも。少なくとも、今より悪くなるものではないかと。w

ちょっと面白いのが、これを使うと

http://プロジェクトの名前.dev/

で作成しているRailsアプリにアクセス出来るようになるそうで。どうやっているのだろうか。。。

では、インストールしてみましょう。


インストール作業

インストールは

$ curl get.pow.cx | sh

で完了。なんと簡単な!

Rails3の適当なアプリを作って

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

で設定完了です。

なお、RVMを使っている場合は「/path/to/myapp」の位置に.rvmrcというファイルを作り

rvm 1.9.2

などと中に書いておきます。これで、実行時に使われるRubyを指定できます。

なんと、これでおしまいです。自動でサーバが立ち上がってくれます。
ブラウザで、

http://プロジェクトの名前.dev/

にアクセスしてみましょう。

導入時のポイント

  1. 環境変数はdevelopmentです。ソースを書き換えたら自動で読み込み直しが起きます。
  2. 強制的にサーバの再起動をしたい場合は、Passengerと同じ。「$ touch tmp/restart.txt」
  3. 動作ログはWebrick使用時と同じく、log/development.logに書かれます
  4. Pow自体のアクセスログは、~/Library/Logs/Pow配下に出力されます
  5. 公式ページでは、インストール直後から動いていると書かれていましたが、私は.rvmrcを作っていなくてはまってました。
  6. Pow自体の起動については、インストール時にMacの起動と共に立ち上がるよう設定されます
  7. なんだかPowの調子が悪いのでは?というときは、psでnode.jsのpidを見つけてkillして下さい。プロセスが消えると、新しいプロセスが自動的に上がってきます

Powはどうやってるの?

公式ドキュメントと実際にインストールされたファイルなどを見たところ、Powは以下の流れで動いているようです。

  • /etc/resolverの下にdevというファイルが作られ、これで問い合わせのドメイン名が「dev」の場合のみ、/etc/resolver/devの設定が参照される
  • 〜.devというドメインへのリクエストの場合は、ローカルのポート20560に送るよう書かれている
  • 20560ではdnsの機能とnackというnode.jsで書かれたRackのサーバが動いている
  • リクエストがあるとnack*1がProxyの役目を行い、配下で動くRackサーバつまり自分が設定したパスのサーバへアクセスが行われる

という感じでした。

Passengerの動きをnode.jsを使って代用している感じのところと、/etc/resolverの下にドメイン名のファイルを置く事で、特定のドメイン毎にDNSなどを切り替えることができる*2という、MacOSXの特性を生かした面白いローカルサーバです。


ということで、本番サーバに近い構成で、かつ手間無く開発用サーバが立ち上がるPowさん。
使ってみて下さい。