[Heroku]スタックのアップグレード(Cedar-14 to Heroku-18(結局Heroku-16))

背景

Rails 5.2.2にバージョンアップしたら、bundle installで下記の警告が出たため、sassc-railsの導入を開始。

Post-install message from sass:

Ruby Sass is deprecated and will be unmaintained as of 26 March 2019.

* If you use Sass as a command-line tool, we recommend using Dart Sass, the new
  primary implementation: https://sass-lang.com/install

* If you use Sass as a plug-in for a Ruby web framework, we recommend using the
  sassc gem: https://github.com/sass/sassc-ruby#readme

* For more details, please refer to the Sass blog:
  http://sass.logdown.com/posts/7081811

どっかのサイトでsasscがCedar-14が標準で動かなくて関連するライブラリ(LibSass)をherokuにインストールする必要があるが、バージョンをあげたら標準で動くと拝見したのでスタックのアップグレードを決意。

だが結果としてCedar-14でも動くことが判明。sassc-railsの公式リポジトリを見ると、Cader-14以上なら大丈夫だった。
https://github.com/sass/sassc-rails#deployment-to-heroku

でも調べる中で、Cedar-14のサポートが2019年4月で終了なので、アップグレードはすることにした。

sasscの導入は、あるgemがsass-railsへのdependencyがまだあるため、完全にはできていない。完全にできたら、別記事で書こうと思う。

安全にアップグレードするための準備

Pipelineを使えるようにする

Review Appsを使えるようにする
→ パイプラインを設定した環境に依存した料金が発生

できればHeroku CIを使えるようにする(使えない場合はreview appで手動テストすれば良い)
→月額$10+利用時間に応じた課金(Performance M環境)

アップグレード

以上の準備ができたら、app.jsonの

"stack": "cedar-14"

"stack": "heroku-18"

に変更してcommit,push,プルリクエストをだす

Review appでbuildしてくれる。エラー発生。

-----> Ruby app detected
-----> Compiling Ruby/Rails
       Command: 'set -o pipefail; curl -L --fail --retry 5 --retry-delay 1 --connect-timeout 3 --max-time 30 https://s3-external-1.amazonaws.com/heroku-buildpack-ruby/heroku-18/ruby-2.3.3.tgz -s -o - | tar zxf - ' failed on attempt 1 of 3.
       Command: 'set -o pipefail; curl -L --fail --retry 5 --retry-delay 1 --connect-timeout 3 --max-time 30 https://s3-external-1.amazonaws.com/heroku-buildpack-ruby/heroku-18/ruby-2.3.3.tgz -s -o - | tar zxf - ' failed on attempt 2 of 3.
 !
 !     An error occurred while installing ruby-2.3.3
 !     
 !     This version of Ruby is not available on Heroku-18. The minimum supported version
 !     of Ruby on the Heroku-18 stack can found at:
 !     
 !     https://devcenter.heroku.com/articles/ruby-support#supported-runtimes
 !
 !     Push rejected, failed to compile Ruby app.
 !     Push failed

ruby2.3.3はheroku-18で対応していないとのこと。

heroku-18の環境でruby -versionをしてみたら、ruby 2.4.4p296だった。2.4.4以上がいるんだと思う。
heroku-16で調査をしてみたらruby 2.4.4p296とかruby2.4.3とか色々だから、↑はあんまりあてにならない指標。。。

とりあえずheroku-16のスタックに変更して、buildしたら通った。

実際にアップグレードを行う。方法は2つ。

  1. Heroku CLIを使う
  2. 管理画面(Setting > Info > Stack > Upgrade Task)から行う

2.だと、最新のものしかできない(現在だとHeroku-18)ため、今回は1.で行う。

$ heroku stack:set heroku-16 -a [アプリ名]
Stack set. Next release on ⬢ [アプリ名] will use heroku-16.
Run git push heroku master to create a new release on ⬢ [アプリ名].

管理画面を見ると heroku-16 will replace cedar-14 on the next deploy とあるので、適当にコミットしてデプロイする。

デプロイすると、管理画面でStackがheroku-16になっている。

動作確認をしてアップグレード完了。

Rails6のこともあるのでできるだけ早いうちにRubyのバージョンアップ、Stackのアップグレードをしたい。

Rubyのバージョンアップをするのが良いと思うが、個人アプリでもないので今回は見送るという判断。

コメント