herokuのschedulerを使って何らかのコントローラのアクションを実行する

Shunsuke Sawada

毎日実行する定期処理はschedulerが便利。
Railsプロジェクト内にファイルを作って、herokuで指定してあげれば、あら簡単、あなたの寝ている間にサーバーが働いてくれます。

lib/tasksにupdate.rakeを作成(ファイル名は例です)

下記の例は、ユーザーを全部取得して、UserControllerの中の何らかのアクションを実行して、その返り値を含むメールをユーザーに配信する、みたいな流れを想定しています。

ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
task update_rss: :environment do

    #ユーザーを取得
    users = User.all

    users.each do |user|

            # UserControllerを使う
            users_controller = UsersController.new
            # 何らかの値を返す
            return_value = users_controller.your_action
            # 何らかの情報をメールに渡す
            info = {}
            info["name"] = user.user_name
            info["val"]  = return_value
            # メールを送る
            UserMailer.rss_update(info, user).deliver
        end
    end

end

task update_rss: :environment do でしていしているタスク名がrakeで実行する時に使う名前になります。

herokuのschedulerの設定はこんな感じ。

Screen Shot 2014-01-08 at 10.28.33 PM

あとは時間を指定してあげれば、定期処理が動きます。
最短は10分なので、テストにちょっと時間がかかりますね。

2
Shunsuke Sawada

おすすめの記事

acts-as-taggable-on タグを表示させる順番を決めたい
Railsを4.2にバージョンアップしたら、Vagrantのローカル開発環境にアクセスできなくなった問題
Railsのバリデーションエラー後にレイアウトが崩れるとき