LoginSignup
6
10

More than 3 years have passed since last update.

【Rails】whenever によるバッチ処理(runner編)

Last updated at Posted at 2020-04-06

はじめに

whenever が使いやすいと書かれていたにもかかわらず、少しはまってしまったのでまとめます。
特に、runner について書きたいと思います。

GemFile

GemFile に whenever を追記して bundle install

GemFile
gem 'whenever', :require => false
$ bundle install

自動化したいソースを記述

と、その前に準備があります。
config/application.rb に 以下の2行を追記してください。
lib のディレクトリの内容を反映させるようです。

ここがはまってしまったポイントです。

config/application.rb
class Application < Rails::Application
  # 追記
  config.autoload_paths += Dir["#{config.root}/lib"]
  config.eager_load_paths += Dir["#{config.root}/lib/**/"]
end

lib/batch/hoge.rb に自動化したいソースを記述してください。

lib/batch/hoge.rb
class Batch::Hoge
  def self.hoge
    puts "Hoge!"
  end
end

ターミナル上で実行できるかどうかを確認。

$ bundle exec rails runner Batch::Hoge.hoge
=> "Hoge!"

自動化のスケジュールを作成

下記コマンドを実行することで、config/schedule.rb を作成。

$ bundle exec wheneverize .

config/schedule.rb に、下記を記載。
自動化させたい頻度と実行したいメソッドを指定してください。

config/schedule.rb
set :output, 'log/crontab.log'
set :environment, :development
set :runner_command, "rails runner"

every 1.day, at: '9:00 am' do
  runner "Batch::ManHoursToBacklog.send_backlog"
end

作成した自動化ソースをcronへ反映・確認・削除

# cron への反映
$ bundle exec whenever --update-crontab 
# cron へ反映した内容の確認(どちらの行でも確認できる)
$ bundle exec whenever 
$ bundle exec crontab -e
# cron へ反映した内容を削除
$ bundle exec whenever --clear-crontab

まとめ

以上が whenever を使ったバッチ処理反映方法でした。
少しでも参考になる方がいれば嬉しいです。

参考

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10