Ruby on Railsでバッチ処理

やりたいこと

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

参考サイト