RailsアプリでActiveRecordを使ったバッチ処理 その2

script/runnerを使うといいようだ。
これは引数の文字列をRubyスクリプトとして解釈し、Rails環境で実行するというもの。

script/runnerによって

ruby script/runner 'p Onsen.count'

といった具合にコマンドラインからモデルを使った処理を実行できる。
コントローラは使えません。(でした)

対象にする環境は-eオプションを使ってdevelopment,production,testをそれぞれ指定できる。
何も指定しない場合のデフォルトはdevelopment。
ゆえにproduction環境で実行したければ以下のごとし。

ruby script/runner -e production 'p Onsen.count'

ちなみに多少複雑なバッチ処理は当然ファイルに書いたスクリプトから読ませたい。
しかしそのために普通にパイプとか使っても駄目だったりする。

解は以下参照。

ActiveRecord と ActiveSupport を使ってコマンドラインアプリを作る – ma2の日記

ruby script/runner 'eval(IO.readlines("hoge.rb").join)'

それにしてもやっぱhogeは基本。
自分もhoge.rbでファイルから実行するテストをしていたので、サンプルコードまんま実行できたw

追記

RailsアプリでActiveRecordを使ったバッチ処理 その3書きました。
みんないろいろ工夫している模様。