heroku schedulerの使い方(Rails,sinatra)

  • 149
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

herokuで定期的な処理を行いたい場合、大体はaddonのheroku Schedulerを使うことになると思うので、簡単にまとめてみる。

特徴など

  • タスクは複数登録可能
  • タスクの起動間隔は10分おき、1時間おき、1日おきで選べる。
  • heroku schedulerはベストエフォート型のサービスなので、実行開始時間は多少の遅延したり、スキップされることがあるので注意する
  • 無償でできるのはプロセスの利用時間は1Dynos (= 750時間(/1ヶ月))
  • WebのDynosを1つ利用していた場合、(1ヶ月が31日の場合) 24h * 31日 = 744hなので、残りの6h分のプロセスのみスケジュールタスクとしての処理時間として利用できます。
  • それ以降は1時間あたり$0.05かかる(1ヶ月フル使用で$37.2)
  • 利用状況は https://dashboard.heroku.com/account のBilling のところで確認できる
  • herokuのアプリケーションをメンテナンスモードにしている場合、時間になってもタスクは実行 されない(スキップされる)

何はともあれaddonを追加

コンソールから

$ heroku addons:add scheduler:standard 

またはaddonページから
https://addons.heroku.com/scheduler

※アドオンは無償ですが、オーバーしたプロセスが課金対象になるのでクレジット登録になります。

スケジュール画面を開く

https://heroku-scheduler.herokuapp.com/dashboard

$ heroku addons:open scheduler

タスクの登録

Railsの場合

lib/tasksの下にrakeファイルを作成

test.rake
task :test_task => :environment do
    #処理
    puts 'done.'
end

スケジュール管理画面でAdd Job...を選択
TASKにrake test_taskを設定
FREQUENCYに起動間隔を設定。

Sinatraの場合

scheduler用の実行ファイルを作成

task.rb
# 処理
puts 'done.'

スケジュール管理画面でAdd Job...を選択
TASKにbundle exec ruby task.rbを設定

ログの確認

$ heroku logs --ps scheduler.xxxx 
#(xxxxは実行時に割り当てられたプロセス番号)

公式Doc

https://devcenter.heroku.com/articles/scheduler#defining-tasks