【问题标题】:Could not invoke task "distillery.release"无法调用任务“distillery.release”
【发布时间】:2020-03-16 09:14:03
【问题描述】:

我正在研究几个不同的 How-Tos(项目中的主要内容以及通过 Google 搜索获得的几个)以部署代码,但我找不到解决这个 Could not invoke task "distillery.release": 1 error found! 问题的方法:

$ 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: abc@company.com
-----> 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:

  abc@company.com

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

设置

  • 二郎22
  • Elixir 1.10.2(使用 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
}

杂项:

$ mix do deps.get, compile
$ echo ".deliver/releases/" >> .gitignore
$ git init
$ git add -a
$ git commit -m "Setting up edeliver"

我将/home/deployer/hello-world.prod.secret.exs 复制到构建和生产服务器。

$ 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"

然后我启动 mix edeliver build release 并得到错误。

【问题讨论】:

    标签: elixir phoenix-framework distillery edeliver


    【解决方案1】:

    相关行是:

    ** (Mix) Could not invoke task "distillery.release": 1 error found!
    --verbosity : Unknown option
    
    

    因为--verbosity 选项在v2 中是deprecated

    每个酒厂的文件:

    --verbosity 标志不再存在,请使用 --silent--quiet--verbose

    它看到无法识别的选项并失败。不幸的是,它恰好出现在 delivery 本身提供的 shell 脚本中(对吗?还是你的?)。

    MIX_ENV="prod" [...] mix do release.version ,  distillery.release --verbosity=verbose
    

    无论如何,构建服务器上似乎有些混乱。我不确定为什么会出现不一致,但也许完全清理会有所帮助。

    【讨论】:

      【解决方案2】:

      解决方法很简单:

      1. 运行mix distillery.init
      2. .deliver/config 中的APP 变量必须与rel/config.exs 中的释放原子相同。

      【讨论】:

        【解决方案3】:

        添加此文件后跟git add . && git commit -m "test" 可以解决问题。

        解决 = 是一种解决方法。

        rel/config

        # Import all plugins from `rel/plugins`
        # They can then be used by adding `plugin MyPlugin` to
        # either an environment, or release definition, where
        # `MyPlugin` is the name of the plugin module.
        ~w(rel plugins *.exs)
        |> Path.join()
        |> Path.wildcard()
        |> Enum.map(&Code.eval_file(&1))
        
        use Distillery.Releases.Config,
            # This sets the default release built by `mix distillery.release`
            default_release: :hello_world,
            # This sets the default environment used by `mix distillery.release`
            default_environment: Mix.env()
        
        # For a full list of config options for both releases
        # and environments, visit https://hexdocs.pm/distillery/config/distillery.html
        
        
        # You may define one or more environments in this file,
        # an environment's settings will override those of a release
        # when building in that environment, this combination of release
        # and environment configuration is called a profile
        
        environment :dev do
          # If you are running Phoenix, you should make sure that
          # server: true is set and the code reloader is disabled,
          # even in dev mode.
          # It is recommended that you build with MIX_ENV=prod and pass
          # the --env flag to Distillery explicitly if you want to use
          # dev mode.
          set dev_mode: true
          set include_erts: false
          set cookie: :"BNCsY8N!n{HeSZ[e_;mefm[~h>}|cU)0e6gJvkV5oh;Die$e:UC/O>Uh*6hG|<k("
        end
        
        environment :prod do
          set include_erts: true
          set include_src: false
          set cookie: :"?4t`!aFwp]@4zosVIBfaIG.^u(BX^nS=Rq}v2u&v0;mRvABjI.TdP*QLKo$rYpa="
        end
        
        # You may define one or more releases in this file.
        # If you have not set a default release, or selected one
        # when running `mix distillery.release`, the first release in the file
        # will be used by default
        
        release :hello_world do
          set version: current_version(:hello_world)
          set applications: [
            :runtime_tools
          ]
        end
        

        【讨论】:

        • 我怀疑这可以自行解决问题。似乎它触发了构建服务器上的一些更新,或者类似的东西。
        • 你是对的。这不是一个修复。但是在修复错误之前解决问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多