【Rails】gem wheneverについて
wheneverとは?
cronの設定を、rubyの簡単な文法で扱えるようにしたライブラリ
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からデータを削除する