SyntaxError when running fly launch on Elixir/Phoenix project

I’m trying to release a personal project to Fyi.io, but when I run fly launch I got the below error:

(SyntaxError) invalid syntax found on nofile:1:1:
    error: unexpected token: "\" (column 1, code point U+005C)
    │
  1 │ \true Code.ensure_loaded?(Mix.Tasks.Phx.Gen.Release)\"
    │ ^
    │
    └─ nofile:1:1
    (elixir 1.16.2) lib/code.ex:571: Code.validated_eval_string/3
    (elixir 1.16.2) lib/enum.ex:987: Enum."-each/2-lists^foreach/1-0-"/2
    (mix 1.16.2) lib/mix/tasks/run.ex:142: Mix.Tasks.Run.run/5
    (mix 1.16.2) lib/mix/tasks/run.ex:85: Mix.Tasks.Run.run/1
    (mix 1.16.2) lib/mix/task.ex:478: anonymous fn/3 in Mix.Task.run_task/5
    (mix 1.16.2) lib/mix/cli.ex:96: Mix.CLI.run_task/2
    c:/Program Files/Elixir/bin/mix:2: (file)
    (elixir 1.16.2) lib/code.ex:1489: Code.require_file/2

Here’s the Erlang and Elixir versions I’m using:
Erlang/OTP 25
Elixir 1.16.2

And here’s the list of deps:

  {:phoenix, "~> 1.7.9"},
  {:phoenix_html, "~> 3.3"},
  {:phoenix_live_reload, "~> 1.2", only: :dev},
  {:phoenix_live_view, "~> 0.19.0"},
  {:floki, ">= 0.30.0", only: :test},
  {:phoenix_live_dashboard, "~> 0.8.0"},
  {:esbuild, "~> 0.7", runtime: Mix.env() == :dev},
  {:tailwind, "~> 0.2.0", runtime: Mix.env() == :dev},
  {:swoosh, "~> 1.3"},
  {:finch, "~> 0.13"},
  {:telemetry_metrics, "~> 0.6"},
  {:telemetry_poller, "~> 1.0"},
  {:gettext, "~> 0.20"},
  {:jason, "~> 1.2"},
  {:plug_cowboy, "~> 2.5"},
  {:phoenix_ecto, "~> 4.0"},
  {:credo, "~> 1.7", only: [:dev, :test], runtime: false},
  {:horde, "~> 0.9.0"},
  {:excoveralls, "~> 0.18", only: :test}

I set the environment to PROD and ran mix compile and mix phx.gen.release but I didn’t get the error by doing that.

Thanks! :smiley:

UPDATE: I even tried with a brand new Phoenix application and I got the same error.

I posted this on Elixir Forum and I got this answer, I hope it might help:

That string appears to be generated here :

releaseCmd := exec.Command("mix", "run", "-e", "\"true = Code.ensure_loaded?(Mix.Tasks.Phx.Gen.Release)\"")

This is really bizarre how \ would leak into the string. As a sanity check, can you fly version update and try gain? I just tried on Elixir 1.16.2 in case our go code leaked some char sequences that suddenly became an issue, but all good on my side.

Ignore me. This was a problem with my go code :slight_smile: Go’s exec.Command will take care of escaping each distinct argument, so the escaped quotes are unnecessary. It’s not clear why this is suddenly a problem for some Elixir installs, but I’ve PR’d a fix on flyctl. Will bump this thread once it makes it thru CI and out the door. Thanks!

2 Likes

Thanks for the answers Chris, and nice catch!

flyctl 0.2.25 is out with this fix. You can run fly version update to get it. Thanks!

1 Like