Reputation: 142
Versions:(both build and production systems are same)
Elixir: 1.4.0
OS: Ubuntu 14.04 LTS
Distillery config:
use Mix.Releases.Config,
default_release: :default,
default_environment: :prod
environment :dev do
set dev_mode: true
set include_erts: false
set cookie: :"cookie"
end
environment :prod do
set include_erts: true
set include_src: false
set cookie: :"cookie"
end
release :my_app do
set version: current_version(:my_app)
end
Edeliver config:
APP="my_app"
AUTO_VERSION=git-revision+build-date
BUILD_HOST="my_build_host"
BUILD_USER="deployer"
BUILD_AT="/tmp/my_app"
PRODUCTION_HOSTS="same_as_build_host"
PRODUCTION_USER="deployer"
DELIVER_TO="/home/my_app"
# For *Phoenix* projects, symlink prod.secret.exs to our tmp source
pre_erlang_get_and_update_deps() {
local _prod_secret_path="/home/xxx/config/prod.secret.exs"
if [ "$TARGET_MIX_ENV" = "prod" ]; then
__sync_remote "
ln -sfn '$_prod_secret_path' '$BUILD_AT/config/prod.secret.exs'
"
fi
}
My initial release succeeded with mix edeliver update production --branch=development --start-deploy
and the app runs fine. When I try to hot code reload,
mix edeliver build upgrade --branch=development
it fails with the command
build command requires --from= or --with argument.
Isn't edeliver
is supposed to take care of this when there is AUTO_VERSION
or I have missed any configuration?
Also, executing the command mix edeliver upgrade production --branch=development --verbose
, results in the error
==> Upgrade from 0.0.1+297b4ff-20170221 to 0.0.1+f9ffa04-20170222 failed:
0.0.1+297b4ff-20170221 does not exist at _build/prod/rel/my_app/releases/0.0.1+297b4ff-20170221
==> Failed to build release:
:bad_upgrade_spec
A remote command failed on:
deployer@my_host
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/jn
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="jn" AUTO_VERSION="git-revision+build-date" BRANCH="development" SKIP_RELUP_MODIFICATIONS="" RELUP_MODIFICATION_MODULE="" USING_DISTILLERY="true" mix do release.version --verbose, release --verbose --env="prod" --name="jn" --upgrade --upfrom="0.0.1+297b4ff-20170221"
fi
Upvotes: 1
Views: 798
Reputation: 142
Oops. The issue is related to https://github.com/boldpoker/edeliver/issues/182.
Upvotes: 1
Reputation: 121010
I went into this some time ago and I was unable to make it work out of the box. I ended up doing the copy (symbolic link) myself:
.deliver/config
# Fix
# ==> Upgrade from 0.0.3+71-7a01b46 to 0.0.4+87-6c98597 failed:
# 0.0.3+71-7a01b46 does not exist at _build/prod/rel/...
pre_erlang_generate_release() {
if [ "$TARGET_MIX_ENV" = "prod" ]; then
__sync_remote "
ln -sfn '$REL_DIR' '$BUILD_AT/_build/prod/'
"
fi
}
This hook is executed after the release is built and before erlang is to generate the upgrade.
Upvotes: 1
Reputation: 342
That error on mix edeliver upgrade production --branch=development --verbose
looks like you don't have the previous release on your release storage.
You can try to build that release again, deploy it to your servers and try to upgrade.
Hope that helps :)
Upvotes: 1