elixirrebar3

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.


Solution

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