/rel/overlays script files not being copied in Umbrella


mix release copies /rel/overlays/bin files
mix release foo_app doesn’t copy /rel/overlays/bin files


According to the docs, the files inside /rel/overlays/bin are copied as explained below:

The files in the rel/overlays directory are copied into every release environment.

However the files are not being copied in my setup using Umbrella. For example, the migrate script should be present in order to execute the migrations - I expected the file to be available in /app/bin/, however it doesn’t exist.

I have an Umbrella with the following structure:

- foo_app
    - rel
      - overlays/bin
         - migrate
         - server
- bar_app
    - rel
      - overlays/bin
         - migrate
         - server

I deploy foo_app running:

RUN MIX_ENV=prod mix release foo_app_release

The Docker container will only contain the shell script foo_app_release under /app/bin/. The files from rel/overlays/bin are missing in the release.

Any help is appreciated!

I think for umbrellas you may need to put things in rel/overlays/ at the root of your repo, not inside the app folders.

I swore having tried that multiple times but just to make sure, tried again to move /rel in the root, and it appears that you are right.

Now the question is, how do we make the script files to work for every app inside the umbrella which may be independently deployed. E.g. this can be found in the migrate script:

cd -P -- "$(dirname -- "$0")"
exec ./foo_app eval FooApp.Release.migrate

What would be the best way to make exec ./foo_app eval FooApp.Release.migrate dynamic so it works for the bar_app too?