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)