はじめに
whenever が使いやすいと書かれていたにもかかわらず、少しはまってしまったのでまとめます。
特に、runner について書きたいと思います。
GemFile
GemFile に whenever を追記して bundle install
gem 'whenever', :require => false
$ bundle install
自動化したいソースを記述
と、その前に準備があります。
config/application.rb に 以下の2行を追記してください。
lib のディレクトリの内容を反映させるようです。
ここがはまってしまったポイントです。
class Application < Rails::Application
# 追記
config.autoload_paths += Dir["#{config.root}/lib"]
config.eager_load_paths += Dir["#{config.root}/lib/**/"]
end
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 に、下記を記載。
自動化させたい頻度と実行したいメソッドを指定してください。
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)
会社紹介
株式会社 Mosaica
最先端テクノロジーで社会課題を解決し、持続可能な未来を創造する IT カンパニー。
AI ソリューション、クラウド統合、DX 推進、経営コンサルティングなど包括的なサービスでビジネス変革を支援しています。
詳しくは 公式サイト までお気軽にご相談ください。
公式サイト: https://mosaica.co.jp/