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
}
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: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 setupedeliver
for phoenix project (there are many good tutorials all around.)TLDR: point your branch explicitly and make sure, that folder
/rel/
under git and committed: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 taskrelease
is in the/rel/config.exs
. And if you use command$ mix edeliver build release
as mentioned in literally all tutorials, edeliver getsmaster
branch version (no matter from what branch you try to build).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.