odeの開発メモ日記

プログラマーやってます。今までの道のり ポケコンbasic→C(DirectX5 ネットやろうぜ)→Perl(ちょろっと)→Java→C#→Ruby→Android(Java)

railsバッチの作り方

作り方

例えば検索インデックス登録用バッチとしてcreate_search_indexというバッチを作る場合


ファイル構成

app/
batch/ ← このフォルダを追加
      create_search_index/
                          create_search_index_batch.rb - railsバッチを定義する
                          create_search_index.sh.sample - 実行用シェルスクリプトのサンプル
                          create_search_index.sh - 実行用シェルスクリプト。sampleをコピーして使う。svn除外にする。
・・・


create_search_index.sh.sample

#!/bin/sh

#staging
ruby `dirname $0`/../../script/runner `dirname $0`/create_search_index_batch.rb  --fetch_size 50
#--fetch_size 50はバッチへの引数です。

#production
#ruby `dirname $0`/../../script/runner `dirname $0`/create_search_index_batch.rb -e production --fetch_size 50

create_search_index_batch.rbに自由にバッチのスクリプトを書いていきます。
もちろんrailsが適用されているのでWebアプリ側で作ったmodelを扱えます。


起動にはbatch/create_serach_index/create_serach_index.shを使用して下さい。これをcronに登録する感じですね。

設置の際

1バッチごとに1つのrailsアプリを設置します。

例えばbatch1とbatch2がある場合

batch1/app
      /batch
・・・

batch2/app
      /batch
・・・

のように2つのrailsアプリを設置するイメージにします。
capistranoで設置する際はbatch1/current/batchですね)


メリット

  • 更新の際に他のバッチに影響を与えない。

注意点

webアプリでenviroments/xx.rbの設定値を追加した場合等は
次回バッチを更新する際に設定値を追加する必要があります。

他の方法と比べて

通常のrubyスクリプトActiveRecordを単体で使う方法等があると思います。
但しWebアプリのModelを共有で使ったりする場合は
Modelの中でenviroments/xx.rbの中で定数を使った設定を使った場合や
plugin、libを使うとなると面倒なことになると思います。

実行環境

rails(2.1.2)