I'm working through a couple of different How-Tos (the main in the project plus several via Google search) for edeliver to deploy code but I can't find a solution to this Could not invoke task "distillery.release": 1 error found! problem:
$ mix edeliver build release
BUILDING RELEASE OF HELLO_WORLD APP ON BUILD HOST
-----> Authorizing hosts
-----> Ensuring hosts are ready to accept git pushes
-----> Pushing new commits with git to: [email protected]
-----> Resetting remote hosts to b8a7e8d2098b228f693352a0ebc59fa5c708f7a3
-----> Cleaning generated files from last build
-----> Updating git submodules
-----> Fetching / Updating dependencies
-----> Compiling sources
-----> Generating release
using mix to generate release
** (Mix) Could not invoke task "distillery.release": 1 error found!
--verbosity : Unknown option
A remote command failed on:
[email protected]
Output of the command is shown above and the command executed
on that host is printed below for debugging purposes:
FAILED with exit status 1:
[ -f ~/.profile ] && source ~/.profile
set -e
cd /tmp/erlang/hello-world/builds
if [ "mix" = "rebar" ]; then
echo "using rebar to generate release"
./rebar -f generate
elif [ "mix" = "relx" ]; then
echo "using relx to generate release"
./relx release
elif [ "mix" = "mix" ]; then
echo "using mix to generate release"
MIX_ENV="prod" LINK_SYS_CONFIG="" LINK_VM_ARGS="" APP="hello_world" AUTO_VERSION="commit-count+git-revision+branch-unless-master" BRANCH="master" SKIP_RELUP_MODIFICATIONS="" RELUP_MODIFICATION_MODULE="" USING_DISTILLERY="" mix do release.version , distillery.release --verbosity=verbose
fi
The setup
- Erlang 22
- Elixir 1.10.2 (compiled with Erlang/OTP 21)
$ mix phx.new hello_world --no-ecto
mix.exs
...
def application do
[
mod: {HelloWorld.Application, []},
extra_applications: [:logger, :runtime_tools, :edeliver]
]
end
...
defp deps do
[
{:phoenix, "~> 1.4.16"},
{:phoenix_pubsub, "~> 1.1"},
{:phoenix_html, "~> 2.11"},
{:phoenix_live_reload, "~> 1.2", only: :dev},
{:gettext, "~> 0.11"},
{:jason, "~> 1.0"},
{:plug_cowboy, "~> 2.0"},
{:edeliver, ">= 1.8.0"},
{:distillery, "~> 2.1", warn_missing: false}
]
end
...
.deliver/config
APP="hello_world" # name of your release
# The applicationis build here:
BUILD_HOST="www.hello-world.de" # host where to build the release
BUILD_USER="deployer" # local user at build host
BUILD_AT="/tmp/erlang/hello-world/builds" # build directory on build host
# Staging
STAGING_HOSTS=""
STAGING_USER=""
# This is the place where it's going to be hosted:
PRODUCTION_HOSTS="www.hello-world.de" # deploy / production hosts separated by space
PRODUCTION_USER="deployer" # local user at deploy hosts
DELIVER_TO="/home/deployer/phoenix-systems" # deploy directory on production hosts
AUTO_VERSION=commit-count+git-revision+branch-unless-master # https://github.com/edeliver/edeliver/wiki/Auto-Versioning
# For *Phoenix* projects, symlink prod.secret.exs to our tmp source
pre_erlang_get_and_update_deps() {
local _prod_secret_path="/home/deployer/hello-world.prod.secret.exs"
if [ "$TARGET_MIX_ENV" = "prod" ]; then
__sync_remote "
ln -sfn '$_prod_secret_path' '$BUILD_AT/config/prod.secret.exs'
"
fi
}
Misc:
$ mix do deps.get, compile
$ echo ".deliver/releases/" >> .gitignore
$ git init
$ git add -a
$ git commit -m "Setting up edeliver"
I copy the /home/deployer/hello-world.prod.secret.exs to the build and production server.
$ mix release.init
* creating rel/vm.args.eex
* creating rel/env.sh.eex
* creating rel/env.bat.eex
$ git add .
$ git commit -m "release config"
Than I start mix edeliver build release and get the error.
The relevant lines are:
As
--verbosityoption was deprecated inv2.Per distillery documentation:
It sees the unrecognized option and fails. Unfortunately, it happens to appear in the shell script provided by
deliveryitself (right? or is it yours?).In any case, there seems to be some mess on the build server. I am not sure why it happens to be inconsistent, but maybe full cleanup would help.