Can't execute esbuild: "Permission denied" on windows 10

I’m using phoenix 1.6.0 rc0. starting phx.server fails, with this message

$ mix phx.server
[info] Application esbuild exited: exited in: Esbuild.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (ErlangError) Erlang error: :eacces
            erlang.erl:4412: :erlang.open_port({:spawn_executable, 'c:/Users/at7wa/NoneDrive/dev/elixr/read_sound
s/_build/esbuild'}, [:use_stdio, :exit_status, :binary, :hide, {:args, ["--version"]}])

OK, so the code is trying to get the version of esbuild. Running it from bash shell:

$ pwd; ./esbuild --version
/c/Users/at7wa/NoneDrive/dev/elixr/read_sounds/_build
bash: ./esbuild: Permission denied

That seems compatible with :eacces error… What is esbuild?

$ pwd; ls -l esbuild; file esbuild
/c/Users/at7wa/NoneDrive/dev/elixr/read_sounds/_build
-rwxr-xr-x 1 at7wa 197609 6979072 Sep 10 08:56 esbuild*
esbuild: PE32 executable (console) Intel 80386 (stripped to external PDB), for MS Windows

Do I have to configure Windows to run this executable? Do I need to install Rust or Windows development tools?

Erlang version 24, Elixir 1.12.3, phoenix 1.6.0 rc 0

It’s the alternative to webpack for new Phoenix projects that doesn’t require npm and simplifies the asset pipeline.

What are the permissions of the _build/ directory? It may not have execute permissions somehow.

This

$ ls -la .
total 7.7M
drwxr-xr-x  3 juan juan 4.0K Aug 24 09:10 ./
drwxr-xr-x 10 juan juan 4.0K Aug 24 09:13 ../
drwxr-xr-x  3 juan juan 4.0K Aug 24 09:08 dev/
-rwxr-xr-x  1 juan juan 7.6M Aug 24 09:10 esbuild*

vs this

$ ls -la .
total 7.7M
drw-r--r--  3 juan juan    4096 Aug 24 09:10 .
drwxr-xr-x 10 juan juan    4096 Aug 24 09:13 ..
drwxr-xr-x  3 juan juan    4096 Aug 24 09:08 dev
-rwxr-xr-x  1 juan juan 7962624 Aug 24 09:10 esbuild

Permissions are similar.

$ ls -al .
total 6820
drwxr-xr-x 1 at7wa 197609       0 Sep 10 10:22 ./
drwxr-xr-x 1 at7wa 197609       0 Sep 10 08:36 ../
drwxr-xr-x 1 at7wa 197609       0 Sep 10 07:32 dev/
-rwxr-xr-x 1 at7wa 197609 6979072 Sep 10 08:56 esbuild*

Notable is that the file size of your esbuild is not the same as mine. What is the output from “file esbuild” on your system?

Oh I’m running in Ubuntu under wsl2 whereas I assume you’re running straight on Windows? The size difference will be how Rust compiles for either system.

$ file esbuild
esbuild: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=S5u5fTvaa2BJ32w9_CF8/QXKvNJ9FO27y42ntpVKG/DIt0p3ospEslSEvXWXmg/ltMk8agLtVC3qNEunUmb, stripped

Yes, I’m running straight Windows 10, using the git bash shell.

Unfortunately I don’t have experience with that strategy so can’t help further. I was hoping my suggestion would be a quick win!

Could be related to this known git-for-windows issue? Errors when running "Git Bash" until it's run as administrator · Issue #1449 · git-for-windows/git · GitHub

thank you for the suggestions.

I’m not so familiar with installing erlang and elixir in wsl2, as well as my preferred IDE–visual studio code. Is there a good guide to getting started?

I used asdf from within the Ubuntu wsl distro, as detailed in the Installing Elixir - The Elixir programming language (elixir-lang.org) docs.

I also use VSCode, and that has very good integration with WSL2. Once in the Ubuntu terminal you run code . in your application’s root directory and it will open VSCode in Windows connected to the subsystem.

Not much more to it, although if you want to run :observer from IEx there’s some X-forwarding setup you have to do to have the linux GUI displayed in WIndows.

How are you currently running postgres/DB of choice? Mine is setup through Docker for Windows and that also interfaces well with docker-compose in Ubuntu.

With hints from 03Juan, I found installation instructions for esbuild at https://esbuild.github.io/getting-started/#download-a-build. I used:

mkdir esbuild_temporary
cd esbuild_temporary
curl -O https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.12.25.tgz

and did the required tar xf esbuild-windows-64-0.12.25.tgz.

That gave me an esbuild.exe that ran. I copied package/esbuild.exe to _builds/esbuild directory (the .exe suffix is not used) in my liveview project. I was finally able to start the server for phoenix.

Although this is a workaround, I’m going to mark this as a solution. (the real solution is to get phoenix 1.6.0 rc1 to install the correct esbuild.)

1 Like