🧪
Resolve "dependency :neotoma is using Rebar 2"
概要
Elixir製のStaticSiteGeneratorである still をセットアップしていたところ、neotoma
ライブラリ関連でエラーに遭遇して解決できたのでメモしておきます。
エラー内容
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でした。
$ 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がヒットしたので、ここに記載されている手順を試したら解消しました。
mix.exs に neotama の設定を追記
mix.exs
の deps
に manager
オプションとoverride
オプションを指定します(この2つを設定すると依存するライブラリにrebar3
を使うよう設定できるみたいです)
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