Where does mix look for rebar?

Here’s my rebar info:

/elixir_programs/friends$ which rebar

~/elixir_programs/friends$ rebar --version
rebar 2.6.4 19 20170625_072305 git 2.6.4-6-g2a52f60

~/elixir_programs/friends$ which rebar3

~/elixir_programs/friends$ rebar3 --version
rebar 3.0.0-beta.4+build.3189.ref21ae314 on Erlang/OTP 20 Erts 9.3

And here’s what my PATH looks like:

$ ruby -e "puts ENV['PATH'].split ':'"

I’m following the “Getting Started” tutorial for Ecto, and it says to issue this command:

 $ mix ecto.gen.repo -r Friends.Repo

Here’s what I get:

~/elixir_programs/friends$ mix ecto.gen.repo -r Friends.Repo
Could not find "rebar", which is needed to build dependency :poolboy
I can install a local copy which is just used by Mix
Shall I install rebar? (if running non-interactively, use "mix local.rebar --force") [Yn]

Why can’t mix find my rebar? Is it better practice to let mix install its own version of rebar?

Mix uses its own copy of rebar placed in $MIX_HOME/rebar and $MIX_HOME/rebar3, by default $MIX_HOME is ~/.mix. This is done, so that we can verify a concrete version of rebar works fine with mix and does not have any bugs - in case such bugs are discovered, it’s also easier to update. It removes one variable (version of rebar) when debugging issues with mix.

1 Like

Thanks for the response.

Then why does the mix output say

Based on what you are saying, the mix message should be:

Could not find Mix’s copy of rebar. Mix needs its own rebar. Should I install a local copy of rebar which is just used by Mix?