かなり前にGigalixirにデプロイしたPhoenixアプリが長い間ほったらかしになっていたので、久しぶりにメンテナンスをしました。
ElixirとErlangのバージョンが古かったので最新のものにしようとしましたが、GigalixirのStackが古くてうまく行きませんでした。
若干戸惑った部分があったので忘備録を残します。
本作品は闘魂Elixir #42の成果です。
これからElixirを始める方にはこのサイトがおすすめです。
Elixirとコミュニティの雰囲気をゆるく味わいたい方は「先端ピアちゃん」さんの動画が超オススメです。
結論
GigalixirにログインしアプリのダッシュボードでStackのバージョンを確認。
必要であれば最新のものにアップデートする。
Gigalixir Stackとは
端的にいうとHerokuが管理しているOSのイメージのようです。
本執筆時点では、gigalixir-18
とgigalixir-20
から選択できるようです。
戸惑ったこと1
公式ドキュメントのデプロイ手順書に書かれている通り、ElixirとErlangのバージョンを変更したら、怒られてしまいました。
この部分です。
echo "elixir_version=1.15.4" > elixir_buildpack.config
echo "erlang_version=26.0.2" >> elixir_buildpack.config
変更前のバージョンは以下の通りでした。
elixir_version=1.12.3
erlang_version=23.3.2
変更後デプロイすると以下のエラーがでました。
...
-----> Checking Erlang and Elixir versions
Will use the following versions:
* Stack heroku-18
* Erlang 26.0.2
* Elixir v1.15.4
Sorry, Erlang '26.0.2' isn't supported yet or isn't formatted correctly. For a list of supported versions, please see https://github.com/HashNuke/heroku-buildpack-elixir#version-support
...
Sorry, Erlang '26.0.2' isn't supported yet or isn't formatted correctly.
Erlang '26.0.2'
はサポートされているはずなのにまだサポートされていないと言い張っています。
For a list of supported versions, please see https://github.com/HashNuke/heroku-buildpack-elixir#version-support
実際にサポートされているバージョンを確認してみます。エラーメッセージにあるリンク先に行くとまた更に複数のURLがあります。
しばらく戸惑った後にアプリのStackのバージョンを確認してみると、最新のものではありませんでした。
...
* Stack heroku-18 <----------- これ
* Erlang 26.0.2
* Elixir v1.15.4
...
これが原因でした。Stackのバージョンによりサポートされる依存関係が異なります。
戸惑ったこと2
長い間メンテナンスをしていなかったので、アプリ自体が古くなっていました。かなり多くのパッケージが廃れたバージョンを使っていました。
これらを一気にバージョンアップしたところ、デプロイでエラーが連発しました。これはアプリ側の問題でGigalixirとは関係ないため、別の問題として切り分けることにします。
まずはmix hex.outdated
コマンドで使用しているパッケージのバージョンをリストアップし、あとは地道に丁寧にアップデートしていきます。
運が良ければ、全部一気にアップデートしても大丈夫かもしれません。今回はだめでした。
mix clean --deps
mix deps.unlock --all
mix deps.get
Gigalixirの他のいろんな技
Gigalixirの他のいろんな技については、Qiitaで「Gigalixir」を検索するといくつか記事が見つかります。
他のプラットフォーム
他のプラットフォームを試してみても良いかもしれません。
ElixirやPhoenix界隈ではPhoenixの作者であるChris McCordさんの所属するFly.ioが人気です。