Ruby: February 2008 Archives

何を作っていたかについて復習しておきましょう。

「スタート」を押す→処理がはじまる→処理の進捗状況がグラフ表示される

という感じのものを作っている途中でした。

そして、構成要素に分けると、

  • 1から100までを一秒に1ずつカウントアップするworker
  • そのworkerをキックするページA
  • そのworkerの進捗状況をJSONかRJSで返すページB
  • Bを定期的に呼び出し進捗グラフを表示するAjaxなページC

となるのでした。

前回は、

1から100までを一秒に1ずつカウントアップするworker
まで作ったのでしたね。

さっそく続きをはじめましょう。

 BackgrounDRbには、原作者が書いたわかりやすいチュートリアル"Introduction to BackgrounDRb"が存在しており、BackgrounDRbで検索するとこのページの内容を実践されている方のブログなどがヒットするのですが、残念ながらBackgrounDRb 1.0では仕様が大きく変わっており、このチュートリアルは動作しません。

 そこで、BackgrounDRb 1.0で上記のチュートリアルと似たようなことを実現してみたいと思います。

 投稿された動画の変換や、一日一回のリマインドメール送信といった、即時に終わらない処理や、定時に起動して実行するジョブ。Webベースのサービスと、こういったジョブを連携させたい場合、たとえフレームワークをベースにWebのプログラムを組んでいたとしても、それらのフレームワークをはみ出してUNIXの機能を使う方法が最もオーソドックスだと思います。

 たとえば、データベースやファイルシステムやソケットに特定の「合図」を書き込んで、それを見張っている何かがジョブを起動したり、たとえばcronを使って定時にプロセスを起動したりするやり方です。

 しかし、これらの方法はオーソドックスであるという利点を持っている反面、
  • フレームワーク側からジョブのステータスを得るための標準的な方法がない
  • cronやシェルといったフレームワークを記述する言語と異なる仕組みを利用しなければならないため、環境に依存しやすい/円滑なデプロイメントの妨げになる
といった欠点もはらんでいます。

 こうした欠点を補うために、フレームワークとシームレスに連動するようなバックグラウンドジョブ実行の機構がいくつか開発されています。これらの機構を利用すると、たとえばWebインターフェイスから動画変換の処理をキックし、変換状況の進捗をグラフ表示するといった処理が一貫性のある方法で記述できます。

 この連載では、私の独断と偏見でRuby on Rails + BackgrounDRbの例を見て行きたいと思います。

 BackgrouDRbを選ぶ理由としては、比較的ポピュラーであること、定時実行と逐次実行両方の機構をもっていることが大きいのですが、もう一つ重要な理由として、BackgrounDRbの前バージョンである0.2系列と、2007年12月20日にリリースされた1.0の間で大きな仕様変更が行われているようで、最新版の機能について紹介されている文書があまり見あたらなかったので私自身困ったということが挙げられます。

About this Archive

This page is a archive of entries in the Ruby category from February 2008.

Ruby: July 2008 is the next archive.

Find recent content on the main index or look in the archives to find all content.