MacOSX限定・Rails3での開発で使える超手間無しサーバ「Pow」
MacOSXでRailsの開発をしている方にちょっと朗報。普通Railsで開発をしているとき、自分用の開発サーバをローカルで
$ rails s
とコマンドを打ち、使っているかと思います。
これをやると3000番のポートで開発中のアプリがdevelopmentモードで立ち上がり、そこにブラウザでアクセスして閲覧、結果を踏まえて修正・・・という流れです。
こうしていると何が困るかというと
- サーバを自分でいちいち立上げないといけない
- 別のアプリも開発サーバを上げるとなると、ポートをずらさないといけない
- 開発用Webサーバ、Webrickは割りと重いので上げっぱなしにしておけない
- かといって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/
にアクセスしてみましょう。
導入時のポイント
- 環境変数はdevelopmentです。ソースを書き換えたら自動で読み込み直しが起きます。
- 強制的にサーバの再起動をしたい場合は、Passengerと同じ。「$ touch tmp/restart.txt」
- 動作ログはWebrick使用時と同じく、log/development.logに書かれます
- Pow自体のアクセスログは、~/Library/Logs/Pow配下に出力されます
- 公式ページでは、インストール直後から動いていると書かれていましたが、私は.rvmrcを作っていなくてはまってました。
- Pow自体の起動については、インストール時にMacの起動と共に立ち上がるよう設定されます
- なんだか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さん。
使ってみて下さい。