Ruby on Railsでバッチ処理
方法
rails runnerコマンドを使う。
- rails runnerコマンドで実行するプログラムの作成
$ vi lib/tasks/anime_tweets_collect_task.rb # coding: utf-8 require 'anime_tweets_searcher' require 'anime_tweets_register' class Tasks::AnimeTweetsCollectTask # メイン処理 def self.execute # Active Recordを使用したDBアクセスが可能 chapters = Chapter.all ・ ・ ・ end end
- 実行プログラムからrequireするクラスはlib配下に格納
$ vi lib/anime_tweets_searcher.rb $ vi lib/anime_tweets_register.rb
- lib配下をロードするための設定を追加
※本設定は実行プログラムからrequireするクラスの有無に関わらず必要なので注意。
$ vi config/application.rb # lib配下をロードするための設定 config.autoload_paths += %W(#{config.root}/lib) config.autoload_paths += Dir["#{config.root}/lib/**/"]
- rails runnerコマンドで起動
$ rails runner Tasks::AnimeTweetsCollectTask.execute
参考サイト
- Rubyのバッチ処理でActiveRecordを使ってモデルクラス経由でのDB接続方法
- Rails3 runnerを利用してバッチプログラムを実行するサンプル