www.r-l.o が fastly を通して配信されるようになったことで、デプロイ直後にトップページなどを更新したい場合にはキャッシュをパージする必要があるのだけど、heroku の場合は buildpack でやるのが良かろうということで以下のように小細工を入れておいた。
https://github.com/ruby/heroku-buildpack-www-ruby-lang/blob/master/lib/language_pack/ruby.rb#L815
やってることは、buildpack での slug compile の最後に fastly の REST API を叩いて purge_all するというもの。注意点としては buildpack で API token などを環境変数から取ってくるときは buildpack のコンテキストとは別にユーザーの環境変数として取ってくる必要があるので ENV
ではなく env
というヘルパーメソッドを使う、ということくらい。purge_all はどうなん?というのはあるけど、heroku の outgoing 通信は別に転送量はかからないので毎回パージしてもいいかな、っていう雑なやつ。
最初は notification 用の http deploy hook でやろうかと思っていたのだけど、ヘッダをいじれなかったり、1つしか登録できないということがあったので、buildpack をいじって対処した。この方法でだいたいは良いのだけど、pipeline を作っている場合は production deploy の際に slug のビルドが走らないので、結局手動でパージしないとダメというのが若干だるい。この辺もっとスマートにやる方法があったら教えて下さい。