railsでcrontab実装
wheneverというgemを使うことで、
定期的にcronで実行したいバッチ処理等を簡単に作成できます。
Gemfile
に以下を記述してbundle install
を実行
gem 'whenever', require: false
その後、次のコマンドを実行
bundle exec wheneverize .
すると、config
以下にschedule.rb
が作成されます。
次の4つをスケジューリングできます。
command: bashコマンドの実行 rake: rakeタスクの実行 runner: Rails内のメソッド実行 script: scriptの実行
次にschedule.rb
に設定を記述します。
# ログファイルの指定 set :output, "#{path}/log/cron.log" #実行環境の指定(デフォルトはproduction) set :environment, :production every 1.day, at: '6:00 am' do runner 'MyModel.test' end
毎日am6:00にMymodelのtestメソッドが実行されます。
他にも設定方法は色々あり、少し例をあげると
#1時間ごと :hour #3時間ごと 3.hours #曜日指定 :sunday, at: '6am' #毎月25~30日まで、0:00に実行 '0 0 25-30 * * '
こんな感じです。
wheneverでは、Rails.root
が使えないらしいので、
Rails内のディレクトリを参照する場合は#{path}
をつけてください。
最後に、crontabの設定です。
#crontabの設定、更新 RAILS_ENV=development bundle exec whenever --update-crontab #crontabの設定削除 RAILS_ENV=development bundle exec whenever --clear-crontab