I hope this will prove useful for other readers of the book.
I was working through chapter 20 OTP: Applications and run to issues with the example for creating a release using Distillery.
The command mix release --env=prod failed with an error like
** (Mix) Could not invoke task “release”: 1 error found!
–env : Unknown option
Since Elixir 1.9 brings releases directly into Elixir, the mix release -command previously used with distillery now overlaps with the Elixir release command.
Distillery version 2.1 works with Elixir 1.9 and updates the distillery release command to mix distillery.release.
I made the following changes to be able to locally follow the distillery release example in the book.
Elixir and OTP versions used:
$ elixir --version
Erlang/OTP 23 [erts-11.0.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]Elixir 1.10.4 (compiled with Erlang/OTP 22)
I don’t have relevant pages as my kindle only shows “locations”, but I have included the section topics.
Section “Your First Release”
1 Change dependency to distillery 2.1 in mix.exs
{:distillery, “~> 1.5”, runtime: false}
{:distillery, “~> 2.1”, runtime: false}
2 Use the updated command for initializing the release
mix release.init
mix distillery.init
3 Create the first release (0.0.1)
mix release --env=prod
MIX_ENV=prod mix distillery.release --env=prod
This first failed for me (after following the book example) with
Release failed: could not load /path/config/config.exs
I got around it by adding a minimal config.exs file
mkdir config && echo “import Config” > config/config.exs
Side note:
In the book the deploy commands are run with ssh.
I tried, instead, to run the deploy commands directly from the _build -directory and found out that consecutive releases don’t work properly that way.
“I only just noticed that the original issue confirms that this issue was occurring because of running from _build.”
Successive hot upgrade releases produce error · Issue #160 · bitwalker/distillery · GitHub
This might be documented on the distillery documentation, but I haven’t made it there yet.
Section “A Second Release”
4 Create the first upgrade release (0.2.0)
mix release --env=prod --upgrade
MIX_ENV=prod mix distillery.release --env=prod --upgrade
5 Upgrade running code
This might be because I didn’t use ssh, but instead just copied the archives to separate directory,
but the command deploy/bin/sequence upgrade 0.2.0 failed with
Node user@host is not running!
To successfully run the upgrade I changed the following:
Update node name, -name argument, in rel/vm.args with the right node name. You can check the node name in the iex console with Node.self command.
Not sure if relevant, but I updated the set cookie option (environment :prod) in rel/config.exs with the value in ~/.erlang.cookie
Section “Migrating Server State”
6. Create the second release
mix release --env=prod --upgrade
MIX_ENV=prod mix distillery.release --env=prod --upgrade
That did it for me