先日、作成中のアプリで、1日1回メール送信を実行するためにwheneverというgemを使おうとしていたのですが、「それだとheroku上で動かないよ!heroku上で一定時間ごとに実行したいことがある際は、Heroku Schedulerというherokuのaddonが簡単で便利だよ!」、とコミュニティの方に教えていただきました!!
この情報を知らなかったら長時間はまっていたと思うので、本当に有難いです。。。!!
実際にHeroku Schedulerで1日1回メール送信を実行するようにセットしてみたのですが、とても簡単でした!!
その方法についてメモしておきます!!
Heroku Schedulerとは
Heroku Schedulerは、Herokuの無料のアドオンです。
指定の時間の間隔(10分、1時間、1日おき)で定期的にアプリケーション上のコマンドを実行する機能です。
設定手順
①アドオンを追加する
以下のコマンドでHeroku Schedulerのアドオンを追加します。
$ heroku addons:add scheduler:standard
Heroku Schedulerは無料のアドオンですが、クレジットカードの登録が必要です。
②lib/tasks配下に、拡張子rakeファイルを追加
lib/tasks配下に、拡張子rakeファイルを追加し、その中に実行したいタスクを定義しておきます。
lib/tasks/scheduler.rake
desc "This task is called by the Heroku scheduler add-on"
task :send_alert_mail => :environment do
puts "Sending mail..."
User.each do |user|
limit_tasks = user.tasks.includes(:user).where(deadline: Date.current..Date.current+3)
if limit_tasks != nil
UserMailer.alert_email(user).deliver_later
end
end
puts "done."
end
③ Heroku Scheduler上で実行したい時間とタスクを設定
以下のように、heroku run rake <実行したいタスク> とコマンドを登録し、
実行したい時間設定をします。
これで完了です!!
