Unable to compile the elixir project

Getting this error when running mix deps.compile.
I tried rm -rf deps _build mix.lock, reinstalling elixir via asdf. I am running out of ideas now. Any help is appreciated.

===> Compiling src/rabbit_heartbeat.erl failed
src/rabbit_heartbeat.erl:22:39: syntax error before: ‘maybe’

rabbit_heartbeat.erl:20:2: type heartbeaters() undefined
rabbit_heartbeat.erl:32:13: type heartbeaters() undefined
rabbit_heartbeat.erl:38:13: type heartbeaters() undefined
rabbit_heartbeat.erl:49:21: type heartbeaters() undefined
rabbit_heartbeat.erl:50:22: type heartbeaters() undefined

** (Mix) Could not compile dependency :rabbit_common, “/Users/ranbirs/.asdf/installs/elixir/1.17.3-otp-26/.mix/elixir/1-17/rebar3 bare compile --paths /Users/ranbirs/workspace/carts-api-bk2/carts-api/_build/dev/lib/*/ebin” command failed. Errors may have been logged above. You can recompile this dependency with “mix deps.compile rabbit_common --force”, update it with “mix deps.update rabbit_common” or clean it with “mix deps.clean rabbit_common”

1 Like

Have you tried mix deps.update rabbit_common and then attempting to compile again?

yes, same error persists.
I even tried git cloning into a new folder and installed deps from scratch but no luck.

maybe in Erlang is enabled by default only since OTP 27, earlier you need to use some flag to enable it, but I am not sure how you can do it in Mix for dependencies.

1 Like

In addition to the above, here’s more info on maybe Expressions — Erlang System Documentation v27.2

Hello @rsshek, welcome to the forums :slight_smile:

Can you upgrade to OTP 27? The maybe keyword will be supported out of the box.

Otherwise, can you try with this environment ERL_FLAGS='-enable-feature maybe_expr'?

1 Like

I was running this app on erlang erlang 26.2.5.5 just tomorrow and before and it was working fine. But I will explore more to see if this what can I do here

I missed the Erlang version bit (serves me right for reading through the phone on the bed). Just upgrade to Erlang 27 and try it.

1 Like

tried with OTP 27 as well (elixir 1.18.1-otp-27)
getting same error again.

** (Mix) Could not compile dependency :rabbit_common, "/Users/ranbirs/.asdf/installs/elixir/1.18.1-otp-27/.mix/elixir/1-18/rebar3 bare compile --paths /Users/ranbirs/workspace/carts-api-bk2/carts-api/_build/dev/lib/*/ebin" command failed.Preformatted text

Hum strange :thinking:

I have had the same error before but generally I clean everything and it works. Have you tried with the ERL_FLAGS variable?

yes tried. same error

1 Like

Have you tried deleting both directories – _build and deps – after upgrading Erlang?

1 Like

yes, tried reinstalling deps after upgrading to erlang 27.2. No luck :frowning:

Currently the erlang AMQP client (and subsequent dependencies) don’t support OTP-27, the only option is to downgrade to OTP-26.

Here is the official link: Erlang Version Requirements | RabbitMQ

PS: I think there was somewhere a more detailed explanation on what it specifically breaks, but I cannot find it now.

2 Likes