Home

Awesome

⛔️ DEPRECATED

This tool is deprecated. Please, use native mix releases (added in elixir 1.9.0) https://hexdocs.pm/mix/Mix.Tasks.Release.html

Exreleasy

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:

This is often required nowadays when we have special tools for each task, for example:

Credit for the idea goes to savonarola.

Installation

  1. Add exreleasy to your list of dependencies in mix.exs:
def deps do
  [{:exreleasy, "~> 0.4.0"}]
end

Usage

To bundle Erlang/Elixir inside your project:

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

To make a release:

mix exreleasy.release v0.0.1

This will create ./release/archive/v0.0.1.tar.gz archive with your project (including ./release directory)

To hot reload your code:

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

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

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

Deploy new code to server

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