bouzuya.hatenablog.com

ぼうずやのにっき

hubot-ping をつくった

hubot-ping をつくった。1 日 1 Hubot スクリプトの 89 日目。

hubot-ping は外部からの ping に応答するための URL を提供する Hubot スクリプト

これをつくった理由は、最近の Heroku にデプロイしている Hubot が idling するようになり、外部から ping を打つ必要が出てきて、そのための 200 OK を返す URL が必要になったから。

Heroku の idling 自体は以前から有名な問題で、Hubot を Heroku にデプロイした場合のあるあるのひとつと言っていい。従来の対応方法としては「環境変数 HEROKU_URL を設定する」のが正解だった。これは Hubot 本体が提供している Heroku の idling 問題への解決策である。この設定をすると 20 分ごとに Hubot が自分自身に ping を打ち idling を防ぐことができた。

ところが先週くらいから、その設定をしていても idling するようになった。Heroku の仕様変更なのか原因は分からないのだけど、自分自身から ping を打つとダメなようだ。github/hubot の issue #779 によると HEROKU_URL はもう機能しないと書いてある。

現状、ベストな方法ははっきりしていないけれど、ぼくは「 Uptime Robot 」を使うことにした。(ちなみに会社の Hubot である sushiNew Relic を使っている。ほかの候補としては pingdom があるだろう。) Uptime Robot は ping を打ってくれるサービス。5 分に 1 回程度なんだけど、Heroku の idling をとめる程度なら十分だし、無料で利用できる(し、そうし続けたいとページに書いてあるのも好感が持てる)。

あとは ping 用の URL を……ということでつくったのが、冒頭の hubot-ping 。これを使うとデフォルトで /hubot/ping が 200 OK を返し、ログに "keep alive ping!" を出力する。process.env.HUBOT_PING_PATH 次第で別のパスに変更できる。

これでひとまず Heroku idling 問題に終止符を打つことができそう。これでしばらく様子を見るつもり。