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

毎日実行する定期処理は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分なので、テストにちょっと時間がかかりますね。

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた