酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

Scheduler Heroku Addonでアプリの起動状態を保つ(アイドルを防ぐ)

Herokuは一定時間応答がないとDynoがサスペンドして、次にアクセスで待ち時間が発生し、レスが悪くなってしまうそうです。その際のアイドル時間は10秒〜20秒らしいです。そこで、Heroku addonの”scheduler”を使って、 10分おきに起こす設定を追加します。

fpu_tmp_1353858566.8389_d8c98b

(1) Heroku アプリにaddonを追加

Addonの登録には、予めクレジットカードを登録しておく必要があります。

コンソール
1
heroku addons:add scheduler:standard

(2) taskファイルを作成

app/lib/tasks/scheduler.rake ファイルを新規作成。 このタスクの内容としては、http://test-app.herokuapp.com/にアクセスするというものです。

app/lib/tasks/scheduler.rake
1
2
3
4
5
6
desc "This task is called by the Heroku cron add-on"
task :call_page => :environment do
   require 'net/http'
   uri = URI.parse('http://test-app.herokuapp.com/')
   Net::HTTP.get(uri)
 end

(3) taskの動作確認

以下を実行して動作を確認。

コンソール
1
heroku run rake call_page

heroku logsで動作確認。エラーメッセージが出ていなければ成功。

コンソール
1
2
3
4
5
6
7
8
9
10
11
12
13
14
heroku logs -t

2012-11-26T03:18:17+00:00 heroku[api]: Starting process with command `bundle exec rake call_page` by email@example.com
2012-11-26T03:18:21+00:00 heroku[run.1]: Awaiting client
2012-11-26T03:18:21+00:00 heroku[run.1]: Starting process with command `bundle exec rake call_page`
2012-11-26T03:18:27+00:00 app[web.1]: Started GET "/" for xx.xx.xx.xx at 2012-11-26 12:18:27 +0900
2012-11-26T03:18:27+00:00 app[web.1]: Processing by ArticlesController#index as */*
2012-11-26T03:18:27+00:00 app[web.1]:   Rendered /index.html.haml within layouts/application (3.5ms)
2012-11-26T03:18:27+00:00 app[web.1]: Completed 200 OK in 8ms (Views: 7.9ms | ActiveRecord: 0.0ms)
2012-11-26T03:18:27+00:00 heroku[router]: at=info method=GET path=/ host=test-app.herokuapp.com fwd= dyno=web.1 queue=0 wait=0ms connect=4ms service=21ms status=200 bytes=704
2012-11-26T03:18:27+00:00 heroku[run.1]: Client connection closed. Sending SIGHUP to all processes
2012-11-26T03:18:28+00:00 heroku[run.1]: Process exited with status 0
2012-11-26T03:18:28+00:00 heroku[run.1]: State changed from up to complete
2012-11-26T03:18:21+00:00 heroku[run.1]: State changed from starting to up

(3) taskの定期実行を設定

Herokuにログイン => My Appsを選択 => 設定するAppを選択

fpu_tmp_1353857903.2315_1956bb

Resources => scheduler を選択

fpu_tmp_1353858120.7219_aea8bf

Taskを “rake call_page”と設定 => Frequencyを “Hourly”に設定 => Saveをクリック。

fpu_tmp_1353858118.5339_3fdb9d

以上です。

変更来歴

11/26 12:00 いろいろ記述ミスがあったので修正 11/27 09:32 call_pageにrequire ‘net/http’を追加

Special Thanks

おすすめの書籍