RailsアプリでActiveRecordを使ったバッチ処理
定期的にAPIからデータを取得するためのバッチ処理を作成している。
まずやりたいことはActiveRecordを使うこと。
あとデータベースの情報はdatabase.ymlから取得するようにする。いろんなところに分散してしまうのは気持ち悪いので。
それで出来たのが以下のようなコード。
require 'rubygems'
require 'active_record'
require 'yaml'
ConfigFile = File.join(File.dirname(__FILE__), "..", "config", "database.yml")
ds = YAML.load(File.read(ConfigFile))
ActiveRecord::Base.establish_connection(ds["development"])
これでActiveRecordを使うことができる。
ds[“development”]の内容を展開すると以下のようなかんじになる。
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "localhost",
:username => "user",
:password => "pass",
:database => "app_dev",
:socket => "/tmp/mysql.sock"
)
Cronからコマンドラインで実行するものなので、環境を引数で指定できるようにするといいかもしれない。
まあとりあえずこんな風に作ったが、他の人はどういうやり方をしているんだろうなぁ。
参考
Rubyist Magazine – プログラマーのための YAML 入門 (初級編)
Railsレシピ
追記
そいやBackgrounDRbってプラグインがあるって聞いたっけ。
気が向いたらフォローしてみよう。
追記2
script/runnerを使ってやる方法がとりあえず普通みたいです。
RailsアプリでActiveRecordを使ったバッチ処理 その2書きました。
追記3
RailsアプリでActiveRecordを使ったバッチ処理 その3書きました。
みんないろいろ工夫している模様。