LoginSignup
79

More than 5 years have passed since last update.

HerokuにデプロイしたHobotをIdlingさせない方法

Last updated at Posted at 2014-02-09

HubotをHipchatやIdobataなどのチャットと連携して利用すると、GithubやTravis、New Relicなどのサービスからの通知をチャットで受け取れて便利です。

その際のデプロイ先としてHerokuが非常に便利なのですが、放置しているとアイドリングしてしまいます。

それでは困るので定期的にリクエストを飛ばすスクリプトを書いて対応していたのですが、もっと簡単な方法があったので紹介します。

Herokuの環境変数HEROKU_URLにHubotのデプロイ先のURLを設定するだけです。

heroku config:set HEROKU_URL=http://yourapp.herokuapp.com/

処理はHubotのrobot.coffeeに書いてあり、HEROKU_URLが設定してあれば20分に1回 http://yourapp.herokuapp.com/hubot/pingにPOSTするようになっています。

https://github.com/github/hubot/blob/master/src/robot.coffee
対象コミット: https://github.com/github/hubot/commit/5e738f634bf5c88b0520a97dd9566abedfaa7f3f

これでアイドリングすることが無くなるはずです。

ってよく読んだら https://github.com/github/hubot/blob/master/docs/deploying/heroku.md に書いてありますね…。

ググると全然違う情報が引っかかったりするので、備忘録ってことで残しておきます。

追記

最新のHubot(2.9.3で確認)では、hubot-scripts/hubot-heroku-keepaliveを使ってアイドリングさせないようにpingを送ります。

今まで通りHEROKU_URLを設定しても動くようですが、互換性維持のために残しているような感じなので、新しく作ったのであればHUBOT_HEROKU_KEEPALIVE_URLを設定した方が良さそうです。

Herokuの環境変数の設定は以下の通り。
heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=PASTE_WEB_URL_HERE

ワンライナーでも設定できるみたいです。
heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web_url | cut -d= -f2)

hubot-heroku-keepaliveでは、デフォルトで5分間隔でpingする設定になっており、HUBOT_HEROKU_KEEPALIVE_INTERVALに値を設定することで変更できるようです。

おまけ

上記対応前はこんなコードで対応してました。

cron = require('cron').CronJob
module.exports = (robot) ->
  url = process.env.HUBOT_URL
  robot.enter ->
  new cron
    cronTime: "*/10 * * * *"
    start: true
    onTick: ->
      robot.http(url + "/hubot/version")
        .get() (err, res, body) ->
          return

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79