martins
martins

Reputation: 10009

How do I recompile rebar3 with an Erlang/OTP 25 compiler? Running Elixir 1.13.4

I´m following the free screencast / tutorial in Phoenix LiveView Starter But I´m not even able to start, as mix setup fails with:

=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)

My mix.exs deps looks like this:

  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

I´m not sure how I can recompile with an OTP 25 compiler. I´m running Elixir 1.13.4. It´s compiled with OTP 24. Not sure if that has anything to do with it? I´ve also tried mix local-rebar --force and mix deps.update telemetry without any luck.

Upvotes: 6

Views: 6312

Answers (4)

Mrinal Saurabh
Mrinal Saurabh

Reputation: 978

Looks like OTP 25 is not quite ready with Elixir. There is a open issue for OTP 25 support.

https://github.com/elixir-lang/elixir/issues/11220

Upvotes: 1

Thomas
Thomas

Reputation: 2952

Replacing Elixir with a version compiled by Erlang/OTP 25 did not quite do the trick for me. I had to also reinstall rebar. Which I guess was what the message told me in the first place...

➜  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)

I had to reinstall rebar with mix local.rebar

Github Thread Source

Upvotes: 5

splatte
splatte

Reputation: 2078

I instead downgraded homebrew's erlang package:

$ 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)

Upvotes: 1

Aleksei Matiushkin
Aleksei Matiushkin

Reputation: 121000

If you’d examine the elixir --version prompt carefully, you’ll spot this:

Elixir 1.13.4 (compiled with Erlang/OTP 24)

Assuming you use asdf as the version manager, make sure you have the proper version installed:

$ 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
...

You need the one, compiled with OTP25, meaning

$ asdf install elixir 1.13.4-otp-25
$ asdf global elixir 1.13.4-otp-25

would do.

Upvotes: 7

Related Questions