Heroku Scheduler

先日、作成中のアプリで、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 <実行したいタスク> とコマンドを登録し、

実行したい時間設定をします。

gyazo.com

 

これで完了です!!