1

I was setting up an Ubuntu 16.04 server for my Elixir/Phoenix application with edeliver when edeliver failed with the error message ** (Mix) The task "release" could not be found along with a exit code of 1. If I go to my build server, git pull my app and run MIX_ENV=prod mix release or just mix release after getting dependencies, I get the same error.

However, the same application works without any problem locally.

My erlang version is erts-9.0 and elixir version is 1.5.5 on both the server and my local computer. Hex version is also the same at 0.16.1.

Phoenix was installed using this command: mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez.

This is my mix.exs file.

defmodule MyApp.Mixfile do
  use Mix.Project

  def project do
    [
      app: :MyApp,
      version: "0.0.1",
      elixir: "~> 1.4",
      elixirc_paths: elixirc_paths(Mix.env),
      compilers: [:phoenix, :gettext] ++ Mix.compilers,
      start_permanent: Mix.env == :prod,
      aliases: aliases(),
      deps: deps()
    ]
  end

  # Configuration for the OTP application.
  #
  # Type `mix help compile.app` for more information.
  def application do
    [
      mod: {MyApp.Application, []},
      extra_applications: [:comeonin, :logger, :runtime_tools, :earmark, :distillery, :edeliver]
    ]
  end

  # Specifies which paths to compile per environment.
  defp elixirc_paths(:test), do: ["lib", "test/support"]
  defp elixirc_paths(_),     do: ["lib"]

  # Specifies your project dependencies.
  #
  # Type `mix help deps` for examples and options.
  defp deps do
    [
      {:phoenix, "~> 1.3.0"},
      {:phoenix_pubsub, "~> 1.0"},
      {:phoenix_ecto, "~> 3.2"},
      {:mariaex, ">= 0.0.0"},
      {:phoenix_html, "~> 2.10"},
      {:comeonin, "~> 4.0"},
      {:phoenix_live_reload, "~> 1.0", only: :dev},
      {:gettext, "~> 0.11"},
      {:earmark, "~> 1.2.3"},
      {:cowboy, "~> 1.0"},
      {:edeliver, "~> 1.4.4"},
      {:distillery, "~> 1.5.1"}
    ]
  end

  # Aliases are shortcuts or tasks specific to the current project.
  # For example, to create, migrate and run the seeds file at once:
  #
  #     $ mix ecto.setup
  #
  # See the documentation for `Mix` for more info on aliases.
  defp aliases do
    [
      "ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
      "ecto.reset": ["ecto.drop", "ecto.setup"],
      "test": ["ecto.create --quiet", "ecto.migrate", "test"]
    ]
  end
end

My edeliver configuration file .deliver/config is as follows:

APP="MyApp"

BUILD_HOST="1.1.1.1"
BUILD_USER="ubuntu"
BUILD_AT="/home/ubuntu/app_build"

PRODUCTION_HOSTS="1.1.1.1" 
PRODUCTION_USER="ubuntu" 
DELIVER_TO="/home/ubuntu/app_release" 

pre_erlang_get_and_update_deps() {
  local _prod_secret_path="/home/ubuntu/app_config/prod.secret.exs"
  if [ "$TARGET_MIX_ENV" = "prod" ]; then
    __sync_remote "
      ln -sfn '$_prod_secret_path' '$BUILD_AT/config/prod.secret.exs'
    "
  fi
}

3 Answers3

4

TLDR: point your branch explicitly and make sure, that folder /rel/ under git and committed:

$ mix edeliver build release --branch=feature/deploy

I had similar error: ** (Mix) The task "release" could not be found and when I tried to find a solution, this unresolved discussion got my attention several times. I realized, that mix task release is in the /rel/config.exs. And if you use command $ mix edeliver build release as mentioned in literally all tutorials, edeliver gets master branch version (no matter from what branch you try to build).

Daniel Puiu
  • 962
  • 6
  • 21
  • 29
Alex_L
  • 66
  • 4
0

As far as I can see, you are using edeliver to deliver the application to the server. Why would you run anything from the server then?

Also, where release task should come from? I believe, you did mean something like:

mix edeliver build release
mix edeliver deploy release to production
mix edeliver restart production

which is the standard flow to build, deploy and restart production with edeliver. Unfortunately, the three commands above won’t work out of the box as well, and you will need to explicitly setup edeliver for phoenix project (there are many good tutorials all around.)

Aleksei Matiushkin
  • 119,336
  • 10
  • 100
  • 160
  • When I run `mix edeliver build release` the command fails. Edeliver outputs the same error message. To investigate, I manually did the build process and bumped into the same error as edeliver. – Mohideen Imran Khan Aug 22 '17 at 22:19
  • I am not sure I get how `edeliver` could output _the same error message_ when running locally. The whole `mix edeliver build release` is _the single `mix` task_, named `edeliver`, being run with _two parameters_. If you manually did the build, there is _no `mix` at all_ available on the target host, the build is a `tar` containing the compiled content. – Aleksei Matiushkin Aug 23 '17 at 06:16
  • Let me paraphrase myself. Since the edeliver build command can't succeed in my development machine, I ssh-ed into the build server and manually typed the commands edeliver would perform. I get the same task not found error. This rules out the possibility that something is wrong with edeliver. My hunch is that the error has got something to do with the server configuration which I'm not aware of. – Mohideen Imran Khan Aug 23 '17 at 08:18
  • “edeliver build command can't succeed in my development machine”—with **what error message**? Also, please show your `.deliver/config`. – Aleksei Matiushkin Aug 23 '17 at 08:31
  • The edeliver error message is also `** (Mix) The task "release" could not be found` along with `FAILED with exit status 1`. I'll now update the question to show my `./deliver/config`. – Mohideen Imran Khan Aug 24 '17 at 03:54
  • Is `1.1.1.1` your localhost, and if not, does it have all the erlang/elixir tools properly installed in the first place? `mix` should not even try `release` target, since basically there is no `release` target at all. Are you sure you have no commas etc, that said, have your run _exactly_ `mix edeliver build release` ? – Aleksei Matiushkin Aug 24 '17 at 07:54
  • I replaced the actual IP address of the server with the value `1.1.1.1`, but the server does have Erlang and Elixir installed, and I've given the versions in the question. – Mohideen Imran Khan Aug 24 '17 at 22:53
0

The problem I had was I forgot to push the latest changes to git which it does fetch the source from. So after adding the edeliver it couldnt find any of the files its generated. By pushing it to git it now works for me.

Philip
  • 6,827
  • 13
  • 75
  • 104