(RuntimeError) could not compile application triggered by mix format

Hey there,

I noticed in the last few days that in one of my projects when it is running with mix phx.server and I edit the code and save and format(format on save or running mix format yields the same) I get this error:

** (RuntimeError) could not compile application: project_x.

You must restart your server after changing the following files:

  * config/dev.exs
  * config/config.exs
  * config/dev.exs
  * config/config.exs


    (phoenix 1.6.6) lib/phoenix/code_reloader/server.ex:226: Phoenix.CodeReloader.Server.mix_compile_unless_stale_config/2
    (phoenix 1.6.6) lib/phoenix/code_reloader/server.ex:178: Phoenix.CodeReloader.Server.mix_compile/4
    (phoenix 1.6.6) lib/phoenix/code_reloader/server.ex:73: anonymous fn/3 in Phoenix.CodeReloader.Server.handle_call/3
    (phoenix 1.6.6) lib/phoenix/code_reloader/server.ex:286: Phoenix.CodeReloader.Server.proxy_io/1
    (phoenix 1.6.6) lib/phoenix/code_reloader/server.ex:71: Phoenix.CodeReloader.Server.handle_call/3
    (stdlib 3.17.1) gen_server.erl:721: :gen_server.try_handle_call/4
    (stdlib 3.17.1) gen_server.erl:750: :gen_server.handle_msg/6
    (stdlib 3.17.1) proc_lib.erl:226: :proc_lib.init_p_do_apply/3

[notice]     :alarm_handler: {:set, {:system_memory_high_watermark, []}}

I cannot stress enough that I am not editing anything in the config folder.

Also if I save/format while the project is starting up I get(could be normal):

08:52:33.803 [error] Task #PID<0.2032.0> started from #PID<0.94.0> terminating
** (File.Error) could not write to file "/app/_build/dev/lib/project_x/consolidated/Elixir.Phoenix.HTML.Safe.beam": no such file or directory
    (elixir 1.13.4) lib/file.ex:1054: File.write!/3
    (mix 1.13.4) lib/mix/tasks/compile.protocols.ex:142: Mix.Tasks.Compile.Protocols.consolidate/4
    (elixir 1.13.4) lib/task/supervised.ex:89: Task.Supervised.invoke_mfa/2
    (elixir 1.13.4) lib/task/supervised.ex:34: Task.Supervised.reply/4
    (stdlib 3.17.1) proc_lib.erl:226: :proc_lib.init_p_do_apply/3
Function: #Function<9.72703324/0 in Mix.Tasks.Compile.Protocols.consolidate/6>
    Args: []

08:52:33.799 [error] Task #PID<0.2057.0> started from #PID<0.94.0> terminating
** (File.Error) could not write to file "/app/_build/dev/lib/project_x/consolidated/Elixir.Enumerable.beam": no such file or directory
    (elixir 1.13.4) lib/file.ex:1054: File.write!/3
    (mix 1.13.4) lib/mix/tasks/compile.protocols.ex:142: Mix.Tasks.Compile.Protocols.consolidate/4
    (elixir 1.13.4) lib/task/supervised.ex:89: Task.Supervised.invoke_mfa/2
    (elixir 1.13.4) lib/task/supervised.ex:34: Task.Supervised.reply/4
    (stdlib 3.17.1) proc_lib.erl:226: :proc_lib.init_p_do_apply/3
Function: #Function<9.72703324/0 in Mix.Tasks.Compile.Protocols.consolidate/6>
    Args: []

formatter.exs looks like this:

[
  plugins: [Phoenix.LiveView.HTMLFormatter],
  import_deps: [:ecto, :phoenix],
  inputs: ["*.{heex,ex,exs}", "priv/*/seeds.exs", "{config,lib,test}/**/*.{heex,ex,exs}"],
  subdirectories: ["priv/*/migrations"]
]

elixir etc versions:

Erlang/OTP 25 [erts-13.0.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit] [dtrace]

Elixir 1.13.4 (compiled with Erlang/OTP 24)

Any ideas why this might be happening?

Could have messed something up when upgraded things with brew.

Ok it seems like I found it.

I am running the project inside a container locally, and there the code is compiled with erlang 24, but on my system where the formatter runs, I have erlang 25 now.
This seems to have caused the issue.
Since updating erlang in the docker image to elixir:1.13.4-otp-25 the issue disappeared.

2 Likes