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

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
itzmidinesh
Hi all, I’m working on a Phoenix project where I need to make external HTTP requests and I’m trying to choose between Req and HTTPoison....
New
pragdave
How do I tell Hologram not to escape HTML when substituting into templates? {Textile.render(@product.long_description)} escapes the HTM...
New
rlipscombe
I’d like to create a file with 600 permissions (rw-------), but there’s a race condition if I create it and then change the permissions. ...
New
leoschweizer
Hi, we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
rlipscombe
When I use Mix.install with a git dependency, using git@github.com:... how do I change the SSH identity used? I’ve got two Github accoun...
New
adr
Hello all. I have a question as to best practices for code organization when implementing a liveview with a lot of responsibilities. Sup...
New

Other Trending Topics Top

dominicletz
Hey there, I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first. ...
New
raa-ziq
Hi everyone :waving_hand: I wanted to share something I’ve been building — NowBlind, a random chat app designed to help people discover ...
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
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
OndrejValenta
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly) AI dream has many faces, but general...
New
kip
Localize is the next generation localisation library for Elixir. Think of it as ex_cldr version 3.0. The first version will be released ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews