2017-02-22 56 views
1

版本:(包括构建和生产系统相同)版本升级版本与edeliver和酒厂

药剂:1.4.0

操作系统:Ubuntu的LTS 14.04

酒厂配置:

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 
} 

我的初次发布成功与mix edeliver update production --branch=development --start-deploy和应用程序运行良好。当我尝试热代码重载,

mix edeliver build upgrade --branch=development

它失败的命令

build command requires --from= or --with argument.

是不是edeliver应该在有AUTO_VERSION照顾这还是我错过了任何配置?

此外,在错误

==> 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: 

    [email protected]_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 

回答

0

mix edeliver upgrade production --branch=development --verbose该错误看起来像你没有对你释放存储以前的版本执行命令mix edeliver upgrade production --branch=development --verbose,结果。

您可以尝试再次构建该版本,将其部署到您的服务器并尝试升级。

希望帮助:)

+0

我在my_project_root/.deliver/releases下有我的旧版本。但它并没有试图找到。相反,它会尝试在_build/prod/rel / –

1

我前一段时间去到这一点,我无法使它工作的开箱。最后我做副本(符号链接)自己:

.deliver /配置

# 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 
} 

释放建成后,将执行此钩和Erlang之前是生成升级。