
veimis
Programming Elixir 1.6 - Distillery-The Elixir Release Manager chapter commands for Elixir 1.9/Distillery 2.1
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
Popular Prag Prog topics










Other popular topics









Latest in PragProg
Latest (all)
Categories:
Popular Portals
- /elixir
- /opensuse
- /rust
- /kotlin
- /ruby
- /erlang
- /python
- /clojure
- /react
- /quarkus
- /go
- /vapor
- /react-native
- /v
- /wasm
- /django
- /security
- /nodejs
- /centos
- /rails
- /haskell
- /fable
- /gleam
- /js
- /swift
- /deno
- /tailwind
- /assemblyscript
- /laravel
- /symfony
- /phoenix
- /crystal
- /typescript
- /debian
- /adonisjs
- /julia
- /arch-linux
- /svelte
- /spring
- /c-plus-plus
- /preact
- /flutter
- /actix
- /java
- /angular
- /ocaml
- /kubuntu
- /zig
- /scala
- /zotonic
- /vim
- /rocky
- /lisp
- /keyboards
- /html
- /emacs
- /nim
- /vuejs
- /elm
- /nerves