Ruby on Railsでバッチを作成して、実行する方法をメモしておきます。またログを出力する方法も紹介します。
【Rails】バッチファイルを作成・実行してログを出力する方法
application.rbに自動読み込みの設定を行います。
appディレクトリ以下ならautoload_pathsの記述は不要です。
・config/application.rb
1 2 3 | class Application < Rails::Application config.autoload_paths += %W(#{config.root}/lib) end |
バッチファイルを作成します。シンプルに”Test Batch”と出力するだけのバッチです。
また、初期化時にバッチのログを出力するよう設定を行っています。
BATCH_LOG_PATHでログの出力先を指定しています。今回は、log/batch.log配下に出力するよう指定しました。
BATCH_LOG_ROTATIONでログローテーションを指定しています。’daily’は1日ごと、’weekly’1週間ごと、’monthly’1か月ごとの指定ができます。
・lib/tasks/batch/test.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | class Tasks::Batch::Test BATCH_LOG_PATH = 'log/batch.log'.freeze BATCH_LOG_ROTATION = 'daily'.freeze # 初期化 def initialize @log = Logger.new(BATCH_LOG_PATH, BATCH_LOG_ROTATION) end # バッチを実行 def self.run perform_print_test_batch end private # 実行処理 def perform_print_test_batch @log.info(__method__.to_s + ' --> Test batch start.') p "Test Batch" @log.info(__method__.to_s + ' <-- Test batch end.') end end |
rails runner クラス名.メソッド名でバッチを実行できます。
1 2 | $ rails runner Tasks::Batch::Test.run "Test Batch" |
以下のようにバッチのログが出力されていることが確認できます。
・log/batch.log
1 2 | I, [2019-06-11T10:40:20.782089 #15670] INFO -- : perform_print_test_batch --> Test batch start. I, [2019-06-11T10:40:20.854641 #15670] INFO -- : perform_print_test_batch <-- Test batch end. |