Just do IT

思うは招く

Heroku の scheduler で Rails タスクを定期実行したい

やりたいこと

Herokuのスケジューラーを使って、Rails(rake)タスクを定期実行したい。

前提

  • Herokuにアプリをデプロイ済み
  • タスクを用意済み
    • ローカルで動くことを確認済み

手順

今回は、以下のように「ネームスペース:タスク名」という構成のタスクを用意した。

scheduler:sample-task

タスクのコマンドを確かめて、存在するかどうかチェックする。

rails -T
or
rake -T

次に、ローカルで Heroku コマンドを使用し、動くか確認する。

heroku run rake scheduler:sample-task

Heroku スケジューラーを開き、タスクをセットする。2020年9月20日時点では、Herokuスケジューラーは無料のアドオンとして利用できる。

f:id:K_Koh:20200920094127j:plain

#以下コマンドをセット
rake scheduler:sample-task

#ネームスペースを設定していなければ
rake sample-task

f:id:K_Koh:20200920094330j:plain

※記事によってはbundle exec ~でセットしていることもあるが、自分の場合は書かなくても動いた。

注意!時間はUTCでしか設定できない

2020年9月20日時点では、HerokuスケジューラーはUTCでしか設定できないので注意が必要。自分でUTCを調べて入力するしかない。

間違っていた方法

#これはローカルでのコマンドだった
heroku run rails scheduler:sample-task

#railsではなくrakeにする
rails scheduler:sample-task

参考