hachinoBlog

hachinobuのエンジニアライフ

Rubyのバッチ処理でActiveRecordを使ってモデルクラス経由でのDB接続方法

Rubyでバッチ処理を書いているのだがDBへの接続で苦戦した。
RailsActiveRecordのように簡単に出来るものだと思っていたのだがそうもいかず..
しかしrails runnerを使えばRails同様のアクセス方法でいけるという事を知りました。
まずは準備としてconfig/application.rbに

config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]

次にrailsプロジェクトのlib/tasks配下にバッチファイル(sample_batch.rb)作成

//使用するモデルファイル(test)を読み込む
require "#{Rails.root}/app/models/user"

class Tasks::SampleBatch
  def self.execute
    test = Test.new
    //userインスタンスに色々値を設定したりする
    user.save
  end
end

でもってコマンドラインから

rails runner Tasks::SampleBatch.execute

これでOK!!


参考URL
http://www.slowlydays.net/wordpress/?p=707
http://www.tamrable.info/?p=299