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
jonnycharles
I’m in search of an Elixir library that offers PDF generation capabilities similar to Ruby’s Prawn. While there have been discussions abo...
New
Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
roeland
Kia ora, We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
mohsen
I’m using an Umbrella project for a Phoenix application, and I want to have one Ecto Repo and one PostgreSQL database shared by all apps....
New
subsaharancoder
I’ve followed the Phoenix LiveView file upload code here Uploads — Phoenix LiveView v1.0.0-rc.7 and so far everything works just fine wit...
New
jaybe78
Hello, I’m developing a online persistent chat system (what’s app) like using elixir/dynamodb/aws for a mobile app(flutter). The diffic...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
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
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews