LoginSignup
6
3

More than 3 years have passed since last update.

【Rails】whenever による定時バッチ処理

Posted at

【Rails】whenever による定時バッチ処理

Wheneverを使ってRailsでのバッチ処理を実装したのでまとめます。

目次


動作環境

OS : macOS Mojave 10.14.6
ruby : 2.6.3p62
rails : 5.2.4

やりたいこと

決まった時間に定期的に実行するタスクを作成したい

手順

wheneverのインストール

Gemfile
gem 'whenever', require: false

インストールの実行

Bundle install

railsにlibを加える

Railsがlibフォルダを読み込めるように設定します
libフォルダにバッチ処理をするファイルを置くためです.

class Application < Rails::Application
  config.autoload_paths += Dir["#{config.root}/lib"]
end

バッチ処理の記載

libにbatchというフォルダを作成し、その中に定期実行するファイルを作成します。
Batch::以降は任意の名前で良いです。


batch/deadline_cleaner.rb

deadline_cleaner
class Batch::DeadlineClear
  def self.deadline_clear
    puts DateTime.now
    puts 'Test'
  end
end

確認

$ bundle exec rails runner Batch::DeadlineClear.deadline_clear

Running via Spring preloader in process 77676
test

schedule.rbの作成・編集

アプリケーションのルートフォルダに移動し、以下のコマンドを実行

$ cd blog-app
$ bundle exec wheneverize .

実行すると config/schedule.rbが作成されます。

その後、以下のようにschedule.rbにスケジュールと実行したいタスクを記載します。

set :output, 'log/crontab.log'
set :environment, :development

every 1.day, at: '00:00 am' do
  runner 'Batch::DeadlineClear.deadline_clear'
end

以下のコマンドでCRONへ反映します.

$ bundle exec whenever --update-crontab 

実行結果

実際に1分ごとにバッチ処理がされていることがわかります.

$ cat log/crontab.log 
Running via Spring preloader in process 78244
2020-05-29T19:50:01+09:00
test
Running via Spring preloader in process 78534
2020-05-29T19:51:01+09:00
test
Running via Spring preloader in process 78598
2020-05-29T19:52:00+09:00
test
Running via Spring preloader in process 78652
6
3
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
3