🧪

Resolve "dependency :neotoma is using Rebar 2"

2022/06/08に公開

概要

Elixir製のStaticSiteGeneratorである still をセットアップしていたところ、neotomaライブラリ関連でエラーに遭遇して解決できたのでメモしておきます。
https://github.com/still-ex/still

エラー内容

stillのインストール手順に従って構築していると、取得段階でエラーが発生

$ mix archive.install hex still_new
$ mix still.new my_site
$ cd my_site
$ mix deps.get
Resolving Hex dependencies...
Dependency resolution completed:
New:
(中略)
* Getting neotoma (Hex package)
dependency :neotoma is using Rebar 2, which is no longer maintained and no longer works in recent Erlang/OTP versions. Remove the :manager option or set it to :rebar3 instead
(後略)

このエラーが出た状態だと、stillにまつわるmixコマンド等が使えない状態になります。

ちなみに、neotamaに依存しているライブラリはslimeでした。
https://github.com/slime-lang/slime

$ mix deps.tree
dependency :neotoma is using Rebar 2, which is no longer maintained and no longer works in recent Erlang/OTP versions. Remove the :manager option or set it to :rebar3 instead
sample_still_ssg
└── still ~> 0.6.1 (Hex package)
    ├── cachex ~> 3.3 (Hex package)
    │   ├── eternal ~> 1.2 (Hex package)
    │   ├── jumper ~> 1.0 (Hex package)
    │   ├── sleeplocks ~> 1.1 (Hex package)
    │   └── unsafe ~> 1.0 (Hex package)
    ├── cowboy ~> 2.8 (Hex package)
    │   ├── cowlib 2.11.0 (Hex package)
    │   └── ranch 1.8.0 (Hex package)
    ├── ex_image_info ~> 0.2.4 (Hex package)
    ├── file_system ~> 0.2.10 (Hex package)
    ├── floki ~> 0.29.0 (Hex package)
    │   └── html_entities ~> 0.5.0 (Hex package)
    ├── jason ~> 1.2 (Hex package)
    ├── markdown ~> 0.1.1 (Hex package)
    ├── mime ~> 1.0 (Hex package)
    ├── mogrify ~> 0.8.0 (Hex package)
    ├── plug ~> 1.10 (Hex package)
    │   ├── mime ~> 1.0 or ~> 2.0 (Hex package)
    │   ├── plug_crypto ~> 1.1.1 or ~> 1.2 (Hex package)
    │   └── telemetry ~> 0.4.3 or ~> 1.0 (Hex package)
    ├── plug_cowboy ~> 2.3 (Hex package)
    │   ├── cowboy ~> 2.7 (Hex package)
    │   ├── cowboy_telemetry ~> 0.3 (Hex package)
    │   │   ├── cowboy ~> 2.7 (Hex package)
    │   │   └── telemetry ~> 1.0 (Hex package)
    │   └── plug ~> 1.7 (Hex package)
    ├── slime ~> 1.2 (Hex package) # <- このライブラリが依存
    │   └── neotoma ~> 1.7 (Hex package)
    ├── timex ~> 3.5 (Hex package)
    │   ├── combine ~> 0.10 (Hex package)
    │   ├── gettext ~> 0.10 (Hex package)
    │   └── tzdata ~> 1.1 (Hex package)
    │       └── hackney ~> 1.17 (Hex package)
    │           ├── certifi ~>2.9.0 (Hex package)
    │           ├── idna ~>6.1.0 (Hex package)
    │           │   └── unicode_util_compat ~>0.7.0 (Hex package)
    │           ├── metrics ~>1.0.0 (Hex package)
    │           ├── mimerl ~>1.1 (Hex package)
    │           ├── parse_trans 3.3.1 (Hex package)
    │           ├── ssl_verify_fun ~>1.1.0 (Hex package)
    │           └── unicode_util_compat ~>0.7.0 (Hex package)
    └── yaml_elixir ~> 2.4 (Hex package)
        └── yamerl ~> 0.10 (Hex package)

解決手順

エラーメッセージで検索すると、次のElixirForumがヒットしたので、ここに記載されている手順を試したら解消しました。
https://elixirforum.com/t/neotoma-is-using-rebar-2-error/47920/10

mix.exs に neotama の設定を追記

mix.exsdepsmanagerオプションとoverrideオプションを指定します(この2つを設定すると依存するライブラリにrebar3を使うよう設定できるみたいです)
https://hexdocs.pm/mix/1.13/Mix.Tasks.Deps.html#module-dependency-definition-options

  29   │   defp deps do
  30   │     [
  31 ~ │       {:still, "~> 0.6.1"},
  32 ~ │       {:neotoma, "~> 1.7.3", manager: :rebar3, override: true},
  33   │     ]
  34   │   end

mix deps.get

depsに設定を追記したらライブラリを取得し直します。
うまく行っていればこの時点でエラーが表示されなくなります。

mix local.rebar

rebarおよびrebar3をHexのCDNからコピーします。
引数を指定して任意のURLやパスからコピーすることも可能です($ hex help local.rebarより)
今回は取得先に指定は無いのでデフォルトから取得して設定を上書きします(このコマンドはやらなくても良いかも)

$ mix local.rebar
/Users/XXXXXX/.mix/rebar already exists, overwrite? [Yn] Y
* creating /Users/XXXXXX/.mix/rebar
/Users/XXXXXX/.mix/rebar3 already exists, overwrite? [Yn] Y
* creating /Users/XXXXXX/.mix/rebar3

mix still.dev

最後にローカル環境でstillを起動します。
エラーが解消されていれば無事に起動するはずです。

Discussion