やりたいこと
Herokuのスケジューラーを使って、Rails(rake)タスクを定期実行したい。
前提
- Herokuにアプリをデプロイ済み
- タスクを用意済み
- ローカルで動くことを確認済み
手順
今回は、以下のように「ネームスペース:タスク名」という構成のタスクを用意した。
scheduler:sample-task
タスクのコマンドを確かめて、存在するかどうかチェックする。
rails -T or rake -T
次に、ローカルで Heroku コマンドを使用し、動くか確認する。
heroku run rake scheduler:sample-task
Heroku スケジューラーを開き、タスクをセットする。2020年9月20日時点では、Herokuスケジューラーは無料のアドオンとして利用できる。
#以下コマンドをセット rake scheduler:sample-task #ネームスペースを設定していなければ rake sample-task
※記事によってはbundle exec ~
でセットしていることもあるが、自分の場合は書かなくても動いた。
注意!時間はUTCでしか設定できない
2020年9月20日時点では、HerokuスケジューラーはUTCでしか設定できないので注意が必要。自分でUTCを調べて入力するしかない。
間違っていた方法
#これはローカルでのコマンドだった heroku run rails scheduler:sample-task #railsではなくrakeにする rails scheduler:sample-task