Mix task "release" not found error

2.4k Views Asked by At

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

There are 3 best solutions below

0
On BEST ANSWER

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).

1
On

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.

7
On

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.)