11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

rails 定期実行 heroku scheduler

Last updated at Posted at 2021-04-01

前提条件

・ruby 2.6.6
・rails 6.0.3.2
・macOS Catalina バージョン10.15.7
・deviseを使用
・herokuにデプロイ済み

概要

webアプリ作成中に、毎日決まった時間に特定の操作を実行させたいなと思い調べてみた。

[1] gem whenever
・・・というものがあるらしく実装しようと思ったら、herokuではサポートされていないらしい。

[2] Herokuのアドオン"Heroku Scheduler"
・・・これを利用すれば、設定した時間にrakeタスクを実行させることができるという。

ということで"Heroku Scheduler"の実装手順を記していく。

addonのインストール

まずHeroku Schedulerを利用できるようにaddonをインストールします。
ターミナル
 heroku addons:create scheduler:standard

Railsでrakeタスクを作成

Heroku Schedulerで実行させるタスクをRailsで書きます。 `lib/tasks/scheduler.rake`を作成しその中に書いていきます。
lib/tasks/scheduler.rake
desc "This task is called by the Heroku scheduler add-on"
task :test_scheduler => :environment do
  puts "scheduler test"
  puts "it works."
end

task :send_reminders => :environment do
  reservations = Reservation.where.not(status: "complete").where(patern: "no")
  reservations.each do |reservation|
    if reservation.end_time - 1.day <= Time.new
      user = User.find_by(id: reservation.user_id)
      reservation.patern = "yes"
      reservation.save
      MessageMailer.send_when_update(user, reservation).deliver
    end
  end
  puts "ended."
end

:test_schedulerはタスクのテストのためのコード、
:send_remindersは私のアプリ内に置き換えたコードです。ここは各自で書き換えてください。

タスクのテスト

正常にHeroku Schedulerが実行されているか、ローカルで確認します。
ターミナル
heroku run rake test_scheduler

#結果
scheduler test
it works.

正常な動作が確認ができたら、
herokuにデプロイし、タスクを実行させるスケジュールを設定していきます。

ジョブのスケジューリング

タスクを実行させるスケジュールを設定をしていきます。herokuをwebで直接たたくか、もしくは下のコマンドをターミナルで叩いても開けます。
ターミナル
heroku addons:open scheduler

スクリーンショット 2021-04-01 17.31.20.png

Add Jobを押すと上記のような画面が出てくるので、
どの間隔でタスクを実行させるか、どのタスクを実行させるかを記入します。

ここでの注意点として、Heroku Schedulerは、UTC(世界協定)の時間であるので、日本との時差を考えて、実行したい時間の9時間前に時間を設定しないといけません。

実行させるコマンド ※各自タスク名は変えてください

bundle exec rake send_reminders

最後にSave Jobを押して完了となります。

参考サイト

https://devcenter.heroku.com/articles/scheduler

11
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?