Background
However, I recently had an issue that would have benefited from System.get_env! and was advised to create a proposal in this group and reopen the discussion.
What was the issue?
Imagine you have a config.exs where you define some configurations. Imagine one of the configurations is the following:
config :my_app,
geolix_db_path: System.get_env("PROJECTS_PATH") <> "/my_app/lib/geoip/GeoLite2-Country.mmdb"
Now this may look normal, but what if you don't have the "PROJETCS_PATH" variable defined?
What error do you think you would get?
We got this:
** (ArgumentError) argument error
(stdlib) eval_bits.erl:101: :eval_bits.eval_exp_field1/6
(stdlib) eval_bits.erl:92: :eval_bits.eval_field/3
(stdlib) eval_bits.erl:68: :eval_bits.expr_grp/4
(stdlib) erl_eval.erl:484: :erl_eval.expr/5
(stdlib) erl_eval.erl:888: :erl_eval.expr_list/6
(stdlib) erl_eval.erl:240: :erl_eval.expr/5
(stdlib) erl_eval.erl:232: :erl_eval.expr/5
What now?
If you find this error message borderline useless and beyond cryptic, then you are with me.
The problem is that the stacktrace is obfuscated while the config file is being evaluated.
The WHY of the proposal
A way of avoiding this would be to have a System.get_env! that blows immediately making the error very clear.
I know I can use || raise "error" but I would like to avoid that every time I use System.get_env in a config file (or somewhere else for that matter).
Have you imagined what is like reading a config.ex file hundreds of lines long while using the || raise trick?
We already have trouble managing our huge config files, adding this would make it even worst.
Additional info
This discussion was generated from the forums. The original post with all the information can be seen here:
https://elixirforum.com/t/mix-exs-does-not-compile/20516