Sooey

2011-05-10 02:29:48 +0900

Webアプリケーションへのエントリポイントは1つだけとは限らない。たとえば、一般的なRailsアプリケーションなら、Webサーバープロセスへのリクエスト経由で動き出す場合と、delayed_jobやResqueといったジョブキューのワーカープロセス経由で動き出す場合があったりします。

普段、開発環境なんかではrails serverしつつ別ターミナルでrake jobs:workしておいたりしますが、HerokuのDavid Dollarさん(He also maintains heroku.gem!)がリリースしたForemanというgemを使うと、こういった複数の種類のプロセスを一括して管理できるようになるみたいなので、試してみました。

まず、foremanをインストール。

$ gem install foreman

例えば、delayed_jobを使ったRailsアプリケーションの場合、Procfileというファイルにこんな感じでプロセスタイプを定義する。

web:    bundle exec rails server
worker: bundle exec rake jobs:work

foreman startすると、それぞれのプロセスタイプ毎にプロセスが立ち上がって、それぞれのプロセスの出力がHerokuのログっぽく統合して出力される(実際はちゃんとカラフルに色分けされます)。

$ foreman start
02:18:23 web.1     | started with pid 51353
02:18:23 worker.1  | started with pid 51356
02:18:28 worker.1  | (in /Users/juno/src/my-awesome-app)
02:18:45 web.1     | => Booting WEBrick
02:18:45 web.1     | => Rails 3.0.7 application starting in development on http://0.0.0.0:3000
02:18:45 web.1     | => Call with -d to detach
02:18:45 web.1     | => Ctrl-C to shutdown server
02:18:55 worker.1  | [Worker(host:galois.local pid:51358)] Starting job worker
02:18:57 web.1     | [2011-05-10 02:18:57] INFO  WEBrick 1.3.1
02:18:57 web.1     | [2011-05-10 02:18:57] INFO  ruby 1.9.2 (2011-02-18) [x86_64-darwin10.7.0]
02:18:57 web.1     | [2011-05-10 02:18:57] INFO  WEBrick::HTTPServer#start: pid=51355 port=3000

終了するにはCtrl-C

とても簡単で良くできています。

もっと掘り下げた話は、Introducing ForemanApplying the Unix Process Model to Web Appsをどうぞ。