Fl4m3Ph03n1x

Fl4m3Ph03n1x

Background

I have an application :myapp and I am trying to add some web functionality to it from zero using Plug. However, even though I have all the files and modules, present, I still can’t launch it because iex can’t find the modules that are outside the lib folder.

Error

When running iex -S mix I get the following error:

** (Mix) Could not start application myapp: exited in: MyApp.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (UndefinedFunctionError) function MyApp.Web.MetricsExporter.setup/0 is undefined (module MyApp.Web.MetricsExporter is not available)
            MyApp.Web.MetricsExporter.setup()
            (myapp) lib/application.ex:19: MyApp.start/2
            (kernel) application_master.erl:277: :application_master.start_it_old/4

Code

To fix the above error, I added the following lines to my mix.exs:

  defp elixirc_paths(:test), do: ["lib", "web", "test/support"]
  defp elixirc_paths(_),     do: ["lib", "web"]

However the error still persists. My folder structure is the following:

config
lib
  |_ application.ex
web
  |_MetricsExporter.ex

Question

Why can’t iex find and compile the MetricsExporter file?

Showing Posts 1 to 5

NobbZ

NobbZ

grep defmodule web/*.ex?

Is there a line saying defmodule MyApp.Web.MetricsExporter do?

Fl4m3Ph03n1x

Fl4m3Ph03n1x OP

$ grep defmodule web/*.ex
web/metrics_exporter.ex:defmodule MyApp.Web.MetricsExporter do
web/metrics_instrumenter.ex:defmodule MyApp.Web.MetricsInstrumenter do
web/router.ex:defmodule MyApp.Web.Router do

Yes, there is.

I have also checked the "_build/#{MIX_ENV}/lib/MyApp/ebin" and I couldn’t find any of the files of the web folder. They are not being compiled as I suspected, but I don’t know why.

NobbZ

NobbZ

And do you actually call elixirc_paths/1 in your mix.exs?

Something like this?

def project do
  [
    # …
    elixirc_paths: elixirc_paths(Mix.env())
  ]
end
Fl4m3Ph03n1x

Fl4m3Ph03n1x OP

The file (redacted to removed sensitive info):


defmodule Quake.MixProject do
  use Mix.Project

  def project do
    [
      app:              :myapp,
      version:          get_version_number(),
      elixir:           "~> 1.8",
      elixirc_path:     elixirc_paths(Mix.env),
      build_embedded:   Mix.env == :prod,
      start_permanent:  Mix.env == :prod,
      test_coverage:    [tool: ExCoveralls],
      deps:             deps()
    ]
  end

  def application do
    [
      extra_applications: [:logger, :runtime_tools],
      mod: {MyApp, []}
    ]
  end

  defp elixirc_paths(:test), do: ["lib", "web", "test/support"]
  defp elixirc_paths(_),     do: ["lib", "web"]

  defp deps do
    [
      { :jason,             "~> 1.0"    },
      { :plug_cowboy,       "~> 2.0 "   },
      { :cowboy,            "~> 2.0"    },
      { :plug,              "~> 1.0"    },
      { :prometheus_plugs,  "~> 1.1.5"  },
      { :prometheus_ex,     "~> 3.0"    },

      # test and dev
      { :excoveralls, "~> 0.8",   only: [:test],        runtime: false  },
      { :dialyxir,    "~> 0.5",   only: [:dev],         runtime: false  },
      { :credo,       "~> 1.0.0", only: [:dev, :test],  runtime: false  },

      # tracing
      { :observer_cli,  "~> 1.5"  }
    ]
  end

  defp get_version_number do
    commit = :os.cmd('git rev-parse --short HEAD') |> to_string |> String.trim_trailing("\n")
    v = "0.1.0+#{commit}"
    case Mix.env do
      :dev -> v <> "dev"
      _ -> v
    end
  end

end
NobbZ

NobbZ

The option has to use plural name.

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews