Deps {:: in_umbrella, true} dependency not available

I’ve got a local solution running just fine using the following mix.exs file:

defmodule Scandimension.MixProject do
  use Mix.Project

  def project do
    [
      app: :scandimension,
      version: "0.1.0",
      elixir: "~> 1.5",
      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: {Scandimension.Application, []},
      extra_applications: [:logger, :runtime_tools, :httpoison, :hubspotex]
    ]
  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.4.3"},
      {:phoenix_pubsub, "~> 1.1"},
      {:phoenix_ecto, "~> 4.0"},
      {:ecto_sql, "~> 3.0"},
      {:postgrex, ">= 0.0.0"},
      {:phoenix_html, "~> 2.11"},
      {:phoenix_live_reload, "~> 1.2", only: :dev},
      {:gettext, "~> 0.11"},
      {:jason, "~> 1.0"},
      {:plug_cowboy, "~> 2.0"},
      {:guardian, "~> 1.2.1"},
      {:comeonin, "~>5.1.0"},
      {:bcrypt_elixir, "~>2.0"},
      {:corsica, "~> 1.0"},
      {:httpoison, "~>1.5.1"},
      {:poison, "~>3.1"},
      {:distillery, "~>2.0"},
      {:hubspotex, in_umbrella: true}
    ]
  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

I had to download the hubspotex package and update/modify it for use, so included it in my /lib directory and referenced it as an in_umbrellla dependency. It works fine locally.

Now I’m trying to build on a server and prep for deploying, but when I run mix compile, I crash the build with the following message:

Unchecked dependencies for environment dev:
* hubspotex (../hubspotex)
  the dependency is not available
** (Mix) Can't continue due to errors on dependencies

Any suggestions?

Thanks,

I resolved my own issue by pushing my changes to Hubspotex to github and changing mix.exs to:

  defp deps do
    [
      {:phoenix, "~> 1.4.3"},
      {:phoenix_pubsub, "~> 1.1"},
      {:phoenix_ecto, "~> 4.0"},
      {:ecto_sql, "~> 3.0"},
      {:postgrex, ">= 0.0.0"},
      {:phoenix_html, "~> 2.11"},
      {:phoenix_live_reload, "~> 1.2", only: :dev},
      {:gettext, "~> 0.11"},
      {:jason, "~> 1.0"},
      {:plug_cowboy, "~> 2.0"},
      {:guardian, "~> 1.2.1"},
      {:comeonin, "~>5.1.0"},
      {:bcrypt_elixir, "~>2.0"},
      {:corsica, "~> 1.0"},
      {:httpoison, "~>1.5.1"},
      {:poison, "~>3.1"},
      {:distillery, "~>2.0"},
      {:hubspotex, git: "https://github.com/GreenWaveSoftware/hubspotex.git"}
    ]
  end

However, I’d still like to understand why the other method worked locally, but not in the server environment.

:wave:

Does this directory exist on your server (relative to your mix.exs)?

1 Like

It does.

The “…/hubspotex” works locally, but fails on the server. I put a full path in as well attempting to get it to work using

{:hubspotex, path:…}

with no luck either.

Your Scandimension.MixProject.project seems a bit different from what is usually used with umbrella apps, that might be the cause.

What if you try something like

  def project do
    [
      app: :scandimension,
      version: "0.1.0",
+     build_path: "../../_build",
+     config_path: "../../config/config.exs",
+     deps_path: "../../deps",
+     lockfile: "../../mix.lock",
      elixir: "~> 1.5",
      elixirc_paths: elixirc_paths(Mix.env()),
      compilers: [:phoenix, :gettext] ++ Mix.compilers(),
      start_permanent: Mix.env() == :prod,
      aliases: aliases(),
      deps: deps()
    ]
  end
1 Like

If I get a chance, I’ll give it a shot. I’m up against a deadline this week, so will continue with the solution that is working (using git). I think I actually prefer that approach since it keeps the dependency separate from the larger app.