mmmrrr

mmmrrr

Escript with EEx or release with cli arguments

I’m building a CLI application to automate different reporting things.

Now others found about this software and also want to use it, so using iex -S mix and calling the functions directly is no longer an option :smiley:

I tried using escript (which looks like what I want), but it complains, that the module EEx is not found.

Also I wondered if I can somehow use mix release because I don’t want to force anyone to install the erlang runtime (since that sounds like a support nightmare): So is there a way to configure a release in a way that it produces a “command line application” that is not started, but instead accepts arguments, does it’s thing and then terminates?

Marked As Solved

ityonemo

ityonemo

I am in a similar situation and have been thinking about this, your post got me to actually get off my butt and try it. Make a blank project. I called mine “test” then I changed Test.hello/1 to IO.puts :world instead of return :world Then mix release, and do _build/dev/rel/test/bin/test eval "Testy.hello" And it does exactly what you expect!

If you’re on linux and you really wanted to be sophisticated about delivery you could put it into a podman container or something and roll it into a single binary, but if you don’t need to roll up a single container (or don’t have the luxury of being in linux) it should be pretty easy to roll up a shell script that will do roll up parameters into the right thing using a release.

Don’t forget to add EEx to your list of :extra_applications in Mix.exs if it needs to be there at runtime. Though I feel like it’s generally better to make it so all of your EEx code runs at compile time, if that’s possible for what you’re doing.

Also Liked

mmmrrr

mmmrrr

Thank you so much for your answer! I’m terribly sorry that it took me so long to write this.

The solution for my first problem was to add EEx to my :extra_applications. Possibly I could use EEx at compile time, I simply have no clue how in this case. I’ll try that :smiley:

Running the application with eval is an interesting approach, even though it does not allow for passing arguments on the command line, correct?

ityonemo

ityonemo

Some of the EEx functions are intended to be run at compile time (for example function_from_file/5). To use this, call EEx.function_from_file(…) inside of defmodule, but outside of a def.

I haven’t tried this, but knowing how Elixir cares about consistency, I’d bet that eval will respect System.argv/0,1. I would be very surprised if it didn’t.

Where Next?

Popular in Questions Top

JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? https://hexdocs.pm/ecto/Ecto.Repo.h...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
chewm
Hi guys, nice to meet you to the whole forum, I’m new here, I’m trying to configure visual studio code for elixir, right now the intellis...
New

Other popular topics Top

JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 30048 115
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
Tee
can someone please explain to me how Enum.reduce works with maps
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
script
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this "1000" What is the ...
New
beno
I will often find my self writing things similar to: case some_value do nil -> something() "" -> something() _ -> someth...
New

We're in Beta

About us Mission Statement