【Rails】gem wheneverについて

wheneverとは?

cronの設定を、rubyの簡単な文法で扱えるようにしたライブラリ

【Linux】cronについて

wheneverの実装

gemのインストール
gem 'whenever', require: false   
$ bundle install
初期設定
$ bundle exec wheneverize .

とコマンドを実行することでschedule.rbというファイルが生成されますので、ここに定期実行させたいタスクやその頻度などを記述していき、cronを編集していくこととなります。

schedule.rbに記述(今回は1時間ごとに作成したrakeタスクを実行する場合とする)
#wheneverはバックグラウンドで処理されるものであるため、Railsとは関係のないプロセスである。
#よって、このファイルの中でRailsのメソッドを使いたい場合は下記の記述が必要である。
#つまりconfig/environment.rbを読み込んでいる
require File.expand_path(File.dirname(__FILE__) + '/environment')


# cronを実行する環境変数
# ENV['RAILS_ENV']で環境を判断し、何も入っていなければ入っていなければ:developmentをrails_envに代入
rails_env = ENV['RAILS_ENV'] || :development

# cronを実行する環境変数をセット
set :environment, rails_env

# cronのログの吐き出し場所
set :output, "#{Rails.root}/log/cron.log"



job_type :rake, "export PATH=\"$HOME/.rbenv/bin:$PATH\"; eval \"$(rbenv init -)\"; cd :path && RAILS_ENV=:environment bundle exec rake :task :output"


every 1.hours do
  rake 'status_task:published'
end

schedule.rbの確認・反映など

$ bundle exec whenever 

→設定内容にエラーがないか確認

$ bundle exec whenever --update-crontab 

→cronにデータを反映

$ bundle exec whenever --clear-crontab

→cronからデータを削除する