2015-12-26(土) [長年日記]
■ Ruby 2.3.0へ
例年どおり25日にrubyがリリースされたので「帰ったらさっそくアップデートだ」と思っていたが、昨日は仕事納めで*1、軽く飲んで帰ったらまったくそんな感じにはならず、翌日の今日からずるずると開始……。
とはいえ手元の環境はrbenv + ansibleのおかげでさくっと終わり、トラブルもなかったんだけど、面倒なのはHeroku上のサービス群なんだよなぁ。HerokuではGemfileにrubyのバージョンを指定するんだけど、それってつまりGemfileを書き換えてcommit→pushしてまわらないといけないわけで、前回の2.2.4のときにもやったけど少々(すごく)かったるい。
で、Herokuのドキュメントには
ruby ENV['CUSTOM_RUBY_VERSION'] || '2.0.0'
とあって「なるほどー!」と思ったのですでに仕込んであったのだ。今回はconfig:setで「2.2.4」を「2.3.0」書き換えるだけだぜー → エラー。うん「Changing environment variables does not recompile your app. For a Ruby version change to take effect through this method, you’ll need to deploy the app again since Ruby is vendored into each slug.」って書いてあるし。とほほ。
けっきょくpushしないとあかんのだったら意味ないよなぁ。masterブランチを汚したくないからとりあえずこんなスクリプトを走らせたが:
#!/bin/sh if [ $# -ne 1 ]; then app=`basename $PWD` else app=$1 fi heroku config:set CUSTOM_RUBY_VERSION=2.3.0 -a ${app} git checkout -b heroku_recompile git commit --allow-empty -m 'empty commit' git push -f git@heroku.com:${app}.git heroku_recompile:master git checkout master git branch -D heroku_recompile
これはダウンタイムが発生するから良くないのよなー。普通にGemfile書き換えるのがスジか。同じリポジトリから複数のアプリに同時デプロイするtDiary.Netみたいな場合はとくに。
*1 本当は28日まで出社日なんだけど職場の満場一致で25日までになった。