niku
Can't find the module in the escript made by one `mix.exs` file at runtime
If I could build escript and run it with just one mix.exs file,
I wondered that handling tiny escript would be more easier.
So I made the following code, built and ran it.
Then it can build, but it seems that it have not found the module at runtime.
Is there a way to make it possible to find the module in the escript at runtime?
/Users/niku/sandbox% elixir -v
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Elixir 1.4.0-rc.1
/Users/niku/sandbox% ls
mix.exs
/Users/niku/sandbox% cat mix.exs
defmodule MyApp.Mixfile do
use Mix.Project
def project do
[app: :my_app,
version: "0.0.1",
escript: escript()]
end
def escript do
[main_module: MyApp.CLI]
end
end
defmodule MyApp.CLI do
def main(_args) do
IO.puts("Hello from MyApp!")
end
end
/Users/niku/sandbox% mix escript.build
Generated my_app app
Generated escript my_app with MIX_ENV=dev
/Users/niku/sandbox% ls
_build mix.exs my_app
/Users/niku/sandbox% ./my_app
** (UndefinedFunctionError) function MyApp.CLI.main/1 is undefined (module MyApp.CLI is not available)
MyApp.CLI.main([])
(elixir) lib/kernel/cli.ex:76: anonymous fn/3 in Kernel.CLI.exec_fun/2
Marked As Solved
NobbZ
Everything in an exs is considered auxiliary and as such only compiled in memory but not to a beam file. That’s why your module isn’t found.
Also Liked
jwarlander
You would configure :elixirc_paths in mix.exs, if you really wanted to do that.. so eg. to compile files in same directory as the mix.exs file instead of in lib/, you could have:
~/src/my_app$ tree
.
|-- cli.ex
`-- mix.exs
0 directories, 2 files
~/src/my_app$ cat mix.exs
defmodule MyApp.Mixfile do
use Mix.Project
def project do
[app: :my_app,
version: "0.0.1",
elixirc_paths: ["."],
escript: escript()]
end
def escript do
[main_module: MyApp.CLI]
end
end
~/src/my_app$ cat cli.ex
defmodule MyApp.CLI do
def main(_args) do
IO.puts("Hello from MyApp!")
end
end
Eiji
You should create a file:
lib/my_app/cli.ex
in your project folder and move MyApp.CLI module definition to this file.
NobbZ
Can you please point out where exactly you mean? The examples talking about *.exs scripts I am aware of, run them through elixir directly, and not build them into an escript through a mix project.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance









