This tool is deprecated. Please, use native mix releases (added in elixir 1.9.0) https://hexdocs.pm/mix/Mix.Tasks.Release.html
A minimal tool for releasing (packaging and hot updating) Elixir applications.
Standard Erlang/Elixir release tools generally attempt to generate a self contained package which contains bootup scripts, VM arguments, shell scripts for launching nodes in the system, appup files, etc.
To the contrary, exreleasy
tries to untie developer's hands and decouple release activities.
This tool allows to separately:
- bundle an application and Erlang/Elixir with a single
mix
command and create wrapper scripts for runningmix
/iex
; - generate a draft for an appup file for migrating from any existing release to another one;
- perfom a hot code reload for a running node.
This is often required nowadays when we have special tools for each task, for example:
- deliver application code with Ansible, SaltStack or some other orchestration tool;
- launch nodes with Systemd generating units with an orchestration tool;
- perform maintenance tasks like running migrations or code reload with an orchestration tool.
Credit for the idea goes to savonarola.
- Add
exreleasy
to your list of dependencies inmix.exs
:
def deps do
[{:exreleasy, "~> 0.4.0"}]
end
mix exreleasy.localize
This will create ./release
directory with Erlang/Elixir and wrapper scripts:
./release/binstubs/mix
./release/binstubs/iex
./release/binstubs/iex_mix
./release/binstubs/erl
./release/binstubs/elixir
mix exreleasy.release v0.0.1
This will create ./release/archive/v0.0.1.tar.gz
archive with your project (including ./release
directory)
- Step 1
Generate appup file for all applications of your project.
mix exreleasy.create_appup --old-release ./release/archive/v0.0.1.tar.gz --new-release ./release/archive/v0.0.2.tar.gz --appup ./appup_1_to_2
Alternatively use release/exreleasy.json
from old release (fetch it from production maybe)
mix exreleasy.create_appup --old-release /path/to/old/manifest.json --new-release ./release/archive/v0.0.2.tar.gz --appup ./appup_1_to_2
- Step 2
Edit appup file to include only modules you want to touch Available instructions - http://erlang.org/doc/man/appup.html
vim ./appup_1_to_2
- Step 3
Apply appup file to release (creates individual appup files in ebin directories)
mix exreleasy.apply_appup --release ./release/archive/v0.0.2.tar.gz --appup ./appup_1_to_2
Alternatively Steps 1-3 can be automated using provided script
./deps/exreleasy/priv/prepare_hot_release prod /path/to/old/release.tar.gz /path/to/new/release.tar.gz
- Step 4
Deploy new code to server
- Step 5
Reload code
env MIX_ENV=prod ./release/binstubs/mix exreleasy.hot_reload --node your_node@your_host --cookie your_cookie --new-path path_to_new_code --reload-configs