メモ:Rails で whenever を使うときのschedule.rbの記述
概要
Railsアプリで定期的にrakeタスクを実行するみたいなことをしたくて、wheneverを入れてcronを設定したんですが、wheneverのREADMEの最初の例とか、wheneverize直後のサンプルそのままだと意図通りに実行されませんでした。
schedule.rbに適宜設定を追加すればいいのですが、いつも何を設定すればいいのか忘れてしまう(かつ、設定すべき内容は環境によって多分異なる)ので、備忘録として書き留めておきます。
参考URL
本記事の内容は、下記の記事の内容の複合みたいな感じです。
schedule.rbのサンプル
# Railsモジュールのメソッド使うために必須 require File.expand_path(File.dirname(__FILE__) + '/environment') # 使用したいjob_typeに、PATHの設定とrbenvの初期化の記述を入れておかないと、bundleコマンドが見つからなかったり、`Bundler::RubyVersionMismatch`が発生したりする job_type :rake, "export PATH=\"$HOME/.rbenv/bin:$PATH\"; eval \"$(rbenv init -)\"; cd :path && RAILS_ENV=:environment bundle exec rake :task :output" # rakeタスク内で日本語を扱う場合(?)、これがないと`encoding::UndefinedConversionError`が発生する env 'LANG', 'ja_JP.UTF-8' # デフォルトだとbashが呼ばれるので適宜変えとく set :job_template, "/bin/zsh -c ':job'" # デフォルトはproduction環境固定なので、少なくとも開発時はこれ必要 set :environment, Rails.env # output指定しないとログが見れない set :output, "#{Rails.root}/log/cron_tab.log" every 10.minutes do rake 'hoge:fuga' end
みたいな感じにすると意図通りタスクが実行されました🙌