I use Vagrant/Virtualbox for my development environments.
After upgrading to Elixir 1.9.1 / Erlang 22, Elixir cannot seem to read any files exposed to my Virtualbox VM from the host via the shared folder functionality. In the below example, /var/local/git/poof is a directory exposed as a shared folder in my VM, and /var/local/git/poof-test is a directory created directly on the local filesystem of the VM:
[root:/var/local/git/poof-test] # cat foo.txt
bar
[root:/var/local/git/poof-test] # iex
Erlang/OTP 22 [erts-10.4.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1]
Interactive Elixir (1.9.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> File.read("foo.txt")
{:ok, "bar\n"}
[root:/var/local/git/poof-test] # cd ../poof
[root:/var/local/git/poof] # cat foo.txt
bar
[root:/var/local/git/poof] # iex
Erlang/OTP 22 [erts-10.4.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1]
Interactive Elixir (1.9.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> File.read("foo.txt")
{:error, :efault}
It’s looking like this goes deeper than Elixir, as Erlang throws the same error:
^C⌁ [root@poof.stirlab.local:/var/local/git/poof] # erl
Erlang/OTP 22 [erts-10.4.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1]
Eshell V10.4.4 (abort with ^G)
1> {ok, File} = file:read_file("foo.txt").
** exception error: no match of right hand side value {error,efault}
As the ‘cat’ calls above show, there’s no issue with reading the actual file. I’ve also tested reading the file via both Node and Python, and it works perfectly.
I’m stumped how to proceed, would love some suggestions!