我正在遵循凤凰LiveView Starter的免费截屏/教程但我甚至无法开始,因为mix setup
失败了:
=ERROR REPORT==== 6-Jul-2022::12:47:58.702361 ===
beam/beam_load.c(551): Error loading function rebar3:parse_args/1: op put_tuple u x:
please re-compile this module with an Erlang/OTP 25 compiler
escript: exception error: undefined function rebar3:main/1
in function escript:run/2 (escript.erl, line 750)
in call from escript:start/1 (escript.erl, line 277)
in call from init:start_em/1
in call from init:do_boot/3
** (Mix) Could not compile dependency :telemetry, "/Users/martinstabenfeldt/.mix/rebar3 bare compile --paths /Users/martinstabenfeldt/Work/pragmaticstudio.com-liveview-starter/code-bundle/live_view_studio/_build/dev/lib/*/ebin" command failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile telemetry", update it with "mix deps.update telemetry" or clean it with "mix deps.clean telemetry"
$ elixir --version
Erlang/OTP 25 [erts-13.0.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit:ns] [dtrace]
Elixir 1.13.4 (compiled with Erlang/OTP 24)
我的混合。命令行如下所示:
defp deps do
[
{:phoenix, "~> 1.5.13"},
{:phoenix_ecto, "~> 4.4"},
{:ecto_sql, "~> 3.4"},
{:postgrex, ">= 0.0.0"},
{:phoenix_live_view, "~> 0.16.4"},
{:floki, ">= 0.30.0", only: :test},
{:phoenix_html, "~> 3.0.4"},
{:phoenix_live_reload, "~> 1.2", only: :dev},
{:phoenix_live_dashboard, "~> 0.4"},
{:telemetry_metrics, "~> 0.6"},
{:telemetry_poller, "~> 1.0"},
{:gettext, "~> 0.11"},
{:jason, "~> 1.0"},
{:plug_cowboy, "~> 2.0"},
{:faker, "~> 0.17.0"},
{:number, "~> 1.0"}
]
end
我不确定如何用OTP 25编译器重新编译。我正在运行Elixir 1.13.4。它是用OTP 24编译的。不确定这是否有关系?我也试过mix local-rebar --force
和mix deps.update telemetry
,但没有任何运气。
如果您仔细检查elixir --version
提示符,您将发现以下内容:
Elixir 1.13.4 (compiled with Erlang/OTP 24)
假设您使用asdf
作为版本管理器,请确保安装了正确的elixir版本:
$ asdf list all elixir
...
1.13.4
1.13.4-otp-22
1.13.4-otp-23
1.13.4-otp-24
1.13.4-otp-25
...
你需要一个,用OTP25
编译,意思是
$ asdf install elixir 1.13.4-otp-25
$ asdf global elixir 1.13.4-otp-25
。
用Erlang/OTP 25编译的版本替换Elixir并没有完全满足我的需求。我还得重新安装钢筋。我想这就是这条信息告诉我的…
➜ notifier mix compile
=ERROR REPORT==== 29-Aug-2022::14:31:31.718410 ===
beam/beam_load.c(148): Error loading module rebar3:
please re-compile this module with an Erlang/OTP 25 compiler
escript: exception error: undefined function rebar3:main/1
in function escript:run/2 (escript.erl, line 750)
in call from escript:start/1 (escript.erl, line 277)
in call from init:start_em/1
in call from init:do_boot/3
** (Mix) Could not compile dependency :telemetry, "/Users/tblevins/.mix/rebar3 bare compile --paths /Users/tblevins/Projects/Sites/Phoenix/personal/notifier/_build/dev/lib/*/ebin" command failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile telemetry", update it with "mix deps.update telemetry" or clean it with "mix deps.clean telemetry"
➜ notifier elixir --version
Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit:ns] [dtrace]
Elixir 1.13.4 (compiled with Erlang/OTP 25)
我不得不重新安装钢筋与mix local.rebar
Github Thread Source
我降级了homebrew的erlang包:
$ brew uninstall --ignore-dependencies erlang
$ brew install erlang@24
$ PATH="/opt/homebrew/opt/erlang@24/bin:$PATH"
$ elixir --version
Erlang/OTP 24 [erts-12.3.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [dtrace]
Elixir 1.13.4 (compiled with Erlang/OTP 24)
看起来OTP 25还没有完全准备好Elixir。对于OTP 25的支持有一个公开的问题。
https://github.com/elixir-lang/elixir/issues/11220