romenigld

romenigld

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") || ?

Showing Posts 1 to 10

NobbZ

NobbZ

You need to set an environment variable that’s visible to your BEAM process. How to do that depends on your operating system.

If you use linux/mac with a sh compatible shell, then it’s export, for fish and windows it’s set.

romenigld

romenigld OP

I have a Mac OS Mojave

NobbZ

NobbZ

Yeah just see my edited post.

It’s export then (under the assumption that you use bash or zsh, which both are the default shells in Mac, depending on the version, but as I’m not a Mac user by myself I have no clue when the change happened)

fun2src

fun2src

Hi,

echo $SHELL

Mojave: /bin/bash → .bash_profile
Catalina: /bin/zsh → .zprofile

https://forum.elixirforum.com/t/programming-phoenix-could-not-fetch-application-environment-wolfram/26584

NobbZ

NobbZ

I’d not hardcode it into any of those…

romenigld

romenigld OP

I use zsh.
So I put in the ~/.zshrc file?

romenigld

romenigld OP

I readed before this post, but it’s not my case.

defmodule InfoSys.Wolfram do
  import SweetXml
  alias InfoSys.Result

  @behaviour InfoSys.Backend

  @base "http://api.wolframalpha.com/v2/query"

  @impl true
  def name, do: "wolfram"

  @impl true
  def compute(query_str, _opts) do
    query_str
    |> fetch_xml()
    |> xpath(~x"/queryresult/pod[contains(@title, 'Result') or
                                 contains(@title, 'Definitions')]
                            /subpod/plaintext/text()")
    |> build_results()
  end

  defp build_results(nil), do: []

  defp build_results(answer) do
    [%Result{backend: __MODULE__, score: 95, text: to_string(answer)}]
  end

  defp fetch_xml(query) do
    {:ok, {_, _, body}} = :httpc.request(String.to_charlist(url(query)))

    body
  end

  defp url(input) do
    "#{@base}?" <>
    URI.encode_query(appid: id(), input: input, format: "plaintext")
  end

  defp id, do: Application.fetch_env!(:info_sys, :wolfram)[:app_id]
end

NobbZ

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”.

romenigld

romenigld OP

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

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.

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New

Other Trending Topics Top

budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews