はじめに
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 を使ったバッチ処理反映方法でした。
少しでも参考になる方がいれば嬉しいです。
参考
- Railsで定期的にバッチ回す「Whenever」
- Rails runnerを使ってファイルを実行しました
- javan/whenever (GitHub)
- dignoe/whenever-elasticbeanstalk (GitHub)