Distillery VS. Elixir 1.9 Release CWD
I’m noticing a difference between Distillery (on Elixir 1.6) and Elixir 1.9 Releases. I’ve got an app that reads a file at ../filename.txt
. With Distillery this results in /my_app_name/rel/filename.txt
being read, whereas with an Elixir 1.9 release, it tries to read /filename.txt
, which does not exist. I’ve checked my app and it’s dependencies for any File.cd
/File.cd!
calls that may have changed the current working directory, but didn’t find anything. I’m running the release inside an Alpine Docker container. Below are a couple commands I ran on the two containers I built.
Distillery (Elixir 1.6) container:
bash-4.4# /my_app_name/rel/my_app_name/bin/my_app_name rpc Elixir.File 'cwd!'
==> Generated sys.config in /my_app_name/rel/my_app_name/var
<<"/my_app_name/rel/my_app_name">>
$ ps aux | cat
...
86 root 0:02 /my_app_name/rel/my_app_name/erts-9.2/bin/beam.smp -Bd -- -root /my_app_name/rel/my_app_name -progname my_app_name/rel/my_app_name/releases/1.0.0/my_app_name.sh -- -home /root -- -noshell -noshell -noinput -boot /my_app_name/rel/my_app_name/releases/1.0.0/my_app_name -boot_var ERTS_LIB_DIR /my_app_name/rel/my_app_name/erts-9.2/../lib -pa /my_app_name/rel/my_app_name/lib/my_app_name-1.0.0/consolidated -name my_app_name@127.0.0.1 -setcookie $djkf/s3!WU`Tt3_^V/OnK&W(MLLAI}@9zup`={$4JtgD}8=XNq^&2B(yzMoZE*) -smp auto -config /my_app_name/rel/my_app_name/var/sys.config -mode embedded -extra -conform_schema /my_app_name/rel/my_app_name/releases/1.0.0/my_app_name.schema.exs -conform_config /my_app_name/rel/my_app_name/releases/1.0.0/my_app_name.conf -- foreground
...
Elixir 1.9 Release container:
$ /my_app_name/rel/my_app_name/bin/my_app_name rpc 'IO.inspect(File.cwd!())'
"/my_app_name"
$ ps aux | cat
...
1 root 0:11 /my_app_name/rel/my_app_name/erts-10.5.3/bin/beam.smp -- -root /my_app_name/rel/my_app_name -progname erl -- -home /root -- -noshell -s elixir start_cli -mode embedded -setcookie VKF7QZAFZRIIRQLQ5Q6WBHFMUV7VGL2Z57K54PYKBIVXTTKO63RQ==== -sname my_app_name -config /my_app_name/rel/my_app_name/tmp/my_app_name-1.0.0-20191105221125-6ebc.runtime -boot /my_app_name/rel/my_app_name/releases/1.0.0/start -boot_var RELEASE_LIB /my_app_name/rel/my_app_name/lib -- -extra --no-halt
...
Any idea why these differences exist? Is this by design? I can adjust the path to the file I’m looking for, that’s not a big deal. What I’m trying to understand is what changed as far as the current working directory goes.