Phoenix 1.6 install error: (UndefinedFunctionError) function :ranch_app.start/2 is undefined

hello there,
this is a frustrated sort of newbe with about a year in phoenix dev.

I just installed phoenix v1.6 with elixir 1.13 and created a new app, so when I run iex -S mix phx.server, this is what I get from the terminal session:

Elixir version
--------------

Elixir 1.13.4 (compiled with Erlang/OTP 22)

Phoenix version
---------------

Phoenix installer v1.6.11
Erlang/OTP 24 [erts-12.3.2.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit]

Application startup error
-------------------------

iex -S mix phx.server
[notice] Application ranch exited: exited in: :ranch_app.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (UndefinedFunctionError) function :ranch_app.start/2 is undefined (module :ranch_app is not available)
            (ranch 1.8.0) :ranch_app.start(:normal, [])
            (kernel 8.3.2) application_master.erl:293: :application_master.start_it_old/4
[notice] Application cowlib exited: :stopped
[notice] Application gettext exited: :stopped
[notice] Application telemetry_poller exited: :stopped
[notice] Application swoosh exited: :stopped
[notice] Application jason exited: :stopped
[notice] Application xmerl exited: :stopped
[notice] Application esbuild exited: :stopped
[notice] Application castore exited: :stopped
[notice] Application phoenix_live_dashboard exited: :stopped
[notice] Application telemetry_metrics exited: :stopped
[notice] Application phoenix_live_view exited: :stopped
[notice] Application phoenix_live_reload exited: :stopped
[notice] Application file_system exited: :stopped
[notice] Application phoenix_html exited: :stopped
[notice] Application postgrex exited: :stopped
[notice] Application ecto_sql exited: :stopped
[notice] Application db_connection exited: :stopped
[notice] Application connection exited: :stopped
[notice] Application phoenix_ecto exited: :stopped
[notice] Application ecto exited: :stopped
[notice] Application decimal exited: :stopped
[notice] Application phoenix exited: :stopped
[notice] Application phoenix_view exited: :stopped
[notice] Application phoenix_pubsub exited: :stopped
[notice] Application plug exited: :stopped
[notice] Application telemetry exited: :stopped
[notice] Application plug_crypto exited: :stopped
[notice] Application mime exited: :stopped
[notice] Application eex exited: :stopped
[notice] Application runtime_tools exited: :stopped


warning: the :gettext compiler is no longer required in your mix.exs.

Please find the following line in your mix.exs and remove the :gettext entry:

    compilers: [..., :gettext, ...] ++ Mix.compilers(),

  (gettext 0.20.0) lib/mix/tasks/compile.gettext.ex:5: Mix.Tasks.Compile.Gettext.run/1
  (mix 1.13.4) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3
  (mix 1.13.4) lib/mix/tasks/compile.all.ex:92: Mix.Tasks.Compile.All.run_compiler/2
  (mix 1.13.4) lib/mix/tasks/compile.all.ex:72: Mix.Tasks.Compile.All.compile/4
  (mix 1.13.4) lib/mix/tasks/compile.all.ex:59: Mix.Tasks.Compile.All.with_logger_app/2
  (mix 1.13.4) lib/mix/tasks/compile.all.ex:36: Mix.Tasks.Compile.All.run/1

** (Mix) Could not start application ranch: exited in: :ranch_app.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (UndefinedFunctionError) function :ranch_app.start/2 is undefined (module :ranch_app is not available)
            (ranch 1.8.0) :ranch_app.start(:normal, [])
            (kernel 8.3.2) application_master.erl:293: :application_master.start_it_old/4

oh and this is on the hated, monopolistic, useless Windows OS… sorry about that, no great all powerful mac os…

Have you tried deleting the _build directory and re-compiling?

yes, no go.

First thing that jumps out: this is running on a more recent OTP than the Elixir itself was compiled on (24 vs 22). I don’t recall any specific change that could cause the error you’re seeing, but it’s good practice to keep those versions aligned.

This warning is caused by the version of Gettext that was released 6 days ago, but should be harmless.

The (ranch 1.8.0) label on the stack trace suggests that ranch is at least partly installed, but the failure means it isn’t completely installed. Do you get any error messages when running mix deps.compile --force?

I am using the same elixir and phoenix versions as OP but running on linux.
I am only gettting this annoying warning

warning: the :gettext compiler is no longer required in your mix.exs.

Please find the following line in your mix.exs and remove the :gettext entry:

compilers: [..., :gettext, ...] ++ Mix.compilers(),

(gettext 0.20.0) lib/mix/tasks/compile.gettext.ex:5: Mix.Tasks.Compile.Gettext.run/1
(mix 1.13.4) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3
(mix 1.13.4) lib/mix/tasks/compile.all.ex:92: Mix.Tasks.Compile.All.run_compiler/2
(mix 1.13.4) lib/mix/tasks/compile.all.ex:72: Mix.Tasks.Compile.All.compile/4
(mix 1.13.4) lib/mix/tasks/compile.all.ex:59: Mix.Tasks.Compile.All.with_logger_app/2
(mix 1.13.4) lib/mix/tasks/compile.all.ex:36: Mix.Tasks.Compile.All.run/1

There is no line in my mix.exs that the error is alluding to. How can I remove the warning ?

1 Like

According to elixir/compatibility-and-deprecations.md at 0774e4c3854ba2a3894ba0fb1de29defe747345d · elixir-lang/elixir · GitHub, Elixir 1.13 and OTP 22 are still OK. Although I wouldn’t combine them as well.

I think the warning itself is fairly obvious: just remove the :gettext atom from the compilers list in mix.exs?

Did you generate a new phoenix app or are you using an older one? If it’s new, can you show the command you used to create the app or perhaps put it on github?

Elixir 1.13 compiled and running on otp 22 is ok; elixir 1.13 compiled with otp 22 but running on otp 24 would give me a second thought.