Exreleasy

A very simple tool for releasing elixir applications.

Many people use erlang releases only for one reason: to bundle local erlang runtime inside the project. But unfortunatelly you loose the ability to run mix.

This tool bundles erlang/elixir locally and creates wrapper scripts for running mix/iex.

Credit for the idea goes to @savonarola

Installation

  1. Add exreleasy to your list of dependencies in mix.exs:
```elixir
def deps do
  [{:exreleasy, "~> 0.1.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 automized 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