romenigld
(RuntimeError) environment variable WOLFRAM_APP_ID is missing
I’m reading the ebook Programming Phoenix 1.4 and in the page 268 when I try to execute the iex it complains for this:
** (RuntimeError) environment variable WOLFRAM_APP_ID is missing.
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
(stdlib) erl_eval.erl:449: :erl_eval.expr/5
(stdlib) erl_eval.erl:126: :erl_eval.exprs/5
(elixir) lib/code.ex:240: Code.eval_string/3
(mix) lib/mix/config.ex:158: anonymous fn/2 in Mix.Config.__import__!/2
(elixir) lib/enum.ex:1948: Enum."-reduce/3-lists^foldl/2-0-"/3
(mix) lib/mix/config.ex:157: Mix.Config.__import__!/2
So I add the API key in both config/dev.exs and config/prod.secret.exs files:
wolfram_app_id =
System.get_env("XXXXXX-XXXXXXXXXX") ||
raise """
environment variable WOLFRAM_APP_ID is missing.
"""
config :info_sys, :wolfram, app_id: wolfram_app_id
I created the key XXXXXX-XXXXXXXXXX in the http://developer.wolframalpha.com/portal/myapps/index.html
with the Application name: rumbl
and then generated the AppID: XXXXXX-XXXXXXXXXX
What I’m doing incorrect?
the value of the WOLFRAM_APP_ID I put just on the config/prod.secret.exs file?
like WOLFRAM_APP_ID= "XXXXXX-XXXXXXXXXX"
and then keep on the config/dev.exs file the code: System.get_env("WOLFRAM_APP_ID") || ?
Marked As Solved
NobbZ
As I said, I’d not hardcode it there for several reasons, but use a .env or .envrc for the project (not comitted into source control) and source it before working with the project.
direnv is a nice tool for such setups. It will automatically “execute” .envrc files when entering a directory, if that directory is “trusted”.
Also Liked
romenigld
Just for help if someone stopped like me in this part of the book, I’ll share what I do for run correctly.
I create inside the config folder a .env file and then add:
export WOLFRAM_APP_ID="XXXXXX-XXXXXXXXXX"
then after I run on terminal:
source config/.env
And then I try iex -S mix:
iex(1)> InfoSys.compute("what is elixir?")
[
%Task{
owner: #PID<0.366.0>,
pid: #PID<0.368.0>,
ref: #Reference<0.625303463.500432897.47893>
}
]
and work’s.
Then I add in the .gitignore file:
# Ignore .env files
/.env
for not share by git the WOLFRAM_APP_ID.
Is that correct what I’m doing?
Thank’s for Help @Nobbz and @fun2src.
NobbZ
I’d not hardcode it into any of those…
NobbZ
This will only ignore .env from the repositories root. If you want to exclude config/.env, then you have to do /config/.env, assuming that git-root and project root are the same.
Other than that, the flow seems to be correct, though I prefer to have .env(rc) files in the project root for discoverability.








