sashaafm

sashaafm

Retrieving Mix configurations at compile-time

Hey guys, continuing from my other thread I’m still building and exploring some compile-time stuff that Elixir can provide.

Right now I’m trying to operate on the Mix config files at compile-time, but I keep getting nil values from the app keys. At first I thought that maybe the configs could only be read at runtime, but then I found this in the Mix.Config doc page:

Configuration set using Mix.Config will set the application env, so that Application.get_env/3 and other Application functions can be used at run or compile time to retrieve or change the configuration.

Is there a specific way to retrieve the config values at compile-time, then? I’ve been trying both:

inside a macro

defmodule A do
  defmacro test do
    IO.inspect Application.get_env(:app, :key)
  end
end

and just inside a module

defmodule A do
  IO.inspect Application.get_env(:app, :key)
end

but I always get nil :frowning2:. Any tips would be appreciated.

Marked As Solved

hubertlepicki

hubertlepicki

You must be doing something wrong. This should, and in my case - does work.

Check out this repo and run mix compile:

https://github.com/hubertlepicki/compiletimeconfig

my results:

➜  compiletimeconfig git:(master) ✗ mix compile
Compiling 1 file (.ex)
"Hello"
Generated compiletimeconfig app

Which correctly prints “Hello” configured in config/config.ex

Here is the relevant commit:
https://github.com/hubertlepicki/compiletimeconfig/commit/379de75e782943f3c7bf0a50d61f2d6d859a6b05

Also Liked

sashaafm

sashaafm

Just looked at your repo and figured that I had the import_config command commented on my config.exs. I literally spent my whole afternoon trying to solve this. Even wrote a parser for the config file! :rage: :cry: :cry: :cry:

Thank you @hubertlepicki

hubertlepicki

hubertlepicki

yes, always tripple check if you do not have a typo or 1 character error before writing a parser of your own :wink:

Where Next?

Popular in Questions Top

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
Tee
can someone please explain to me how Enum.reduce works with maps
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
JulienCorb
I am trying to implement my new.html.eex file to create new posts on my website. new.html.eex: <h1>Create Post</h1> <%= ...
New
Lily
In templates/appointment/index.html.eex: <%= for appointment <- @appointments do %> <tr> <td><%= appoi...
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
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
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: The documentation above suggests that while ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
srinivasu
How to handle excepions in elixir? Suppose i have A, B, C ,D, E modules. and each module has get() function. A.get() method will call t...
New

Other popular topics Top

marius95
Hello everyone, I try to use an Javascript Event Handler in my root.html.leex file. Therefore I created a function in the app.js file: ...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
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
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 39297 209
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 47930 226
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
PeterCarter
There are pre-rolled solutions for other frameworks that do work. However, Phoenix does not seem to have these. Have people had good expe...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New

We're in Beta

About us Mission Statement