spencerolson

spencerolson

Mix.escript.install and config/config.exs

Hi all!

I am fairly new to the elixir ecosystem and I’m working on my first library, weather. It’s a simple library that fetches and displays weather information, and it’s packaged as an escript.

In order to support displaying times in the correct zone for the weather data, I’ve added:

config :elixir, :time_zone_database, Tz.TimeZoneDatabase

to my config/config.exs.

Something strange I’ve noticed: when I install the escript via hex, the times are returned in UTC which leads me to believe the config.exs is not being evaluated.

$ mix escript.install hex weather 0.3.7
$ weather --test clear

🌞 10:17AM | 🌚 1:25AM
# THESE ARE UTC TIMES. THEY SHOULD BE 3PM, 6PM, 9PM,12AM,3AM
76°  ⬇   74°  ⬇   64°  ⬇   60°  ⬇   58°
8PM      11PM     2AM      5AM      8AM

77° | scattered clouds | 37% humidity

However, when installing via github, the times are reported in their correct zone, leading me to believe the config.exs is being evaluated in that case:

$ mix escript.install github spencerolson/weather tag v0.3.7
$ weather --test clear

🌞 5:17AM | 🌚 8:25PM

# THESE TIMES ARE IN THE CORRECT ZONE
76°  ⬇   74°  ⬇   64°  ⬇   60°  ⬇   58°
3PM      6PM      9PM      12AM     3AM

77° | scattered clouds | 37% humidity

Can someone help me understand what’s going on? Is it expected that I’d get different results when installing the escript from different locations? I’ve also tried installing without specifying a tag, and I run into the same issues.

Thanks in advance!

Marked As Solved

spencerolson

spencerolson

Think I found a solution that I’m happy with, and I can do away with having to tinker with the Application configuration :slight_smile:

I’ll change my call to DateTime.shift_zone/3 here to make use of the third argument I can pass which specifies a Time zone database :slight_smile: DateTime — Elixir v1.17.3

And to answer my own question about the differences between github + hex, it appears that on hex the config.exs file isn’t present (which makes sense, because configs of dependencies are not used so it has no reason to store them)

Also Liked

spencerolson

spencerolson

For posterity, here’s the change I ended up with. If there’s no timezone configured, use Tz.TimeZoneDatabase, otherwise use the already-configured timezone database.

And i was able to simplify installation instructions and get rid of an Application config value :partying_face:

Where Next?

Popular in Questions Top

lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: https://hexdocs.pm/ecto/Ecto.Schema.html#module-...
New
New
makeitrein
Hey all, just started picking up Elixir last week and am writing a scraper as a learning project. Baby step #1 is extracting the number ...
New
johnnyicon
Hi all, I've just started learning Elixir and Phoenix Framework, so please pardon my n00bness at this stage. I'm trying to use Postg...
New
Exadra37
Sometimes I want to check if the input into a function is not a blank string. My first approach: defmodule Example do def do_stuff(s...
New
sabri
Can someone explain the settings of pool_size of Ecto in config file? and what is the recommend size? Thanks
New

Other popular topics Top

lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
beno
I will often find my self writing things similar to: case some_value do nil -> something() "" -> something() _ -> someth...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New

We're in Beta

About us Mission Statement