Error in CLI app: Could not start application tzdata: exited in: Tzdata.App.start(:normal, [])

I have an CLI app in an an application but anytime I want to run to it. I get an error from tzdata

ERROR! Could not start application tzdata: exited in: Tzdata.App.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (MatchError) no match of right hand side value: {:error, {:shutdown, {:failed_to_start_child, Tzdata.EtsHolder, {%File.Error{reason: :enotdir, path: "/home/daniel/personal/projects/blud/blud/tzdata/priv/release_ets", action: "list directory"}, [{File, :ls!, 1, [file: ~c"lib/file.ex", line: 1700]}, {Tzdata.EtsHolder, :release_files_for_dir, 1, [file: ~c"lib/tzdata/ets_holder.ex", line: 127]}, {Tzdata.EtsHolder, :make_sure_a_release_is_on_file, 0, [file: ~c"lib/tzdata/ets_holder.ex", line: 90]}, {Tzdata.EtsHolder, :init, 1, [file: ~c"lib/tzdata/ets_holder.ex", line: 16]}, {:gen_server, :init_it, 2, [file: ~c"gen_server.erl", line: 2057]}, {:gen_server, :init_it, 6, [file: ~c"gen_server.erl", line: 2012]}, {:proc_lib, :init_p_do_apply, 3, [file: ~c"proc_lib.erl", line: 329]}]}}}}
            (tzdata 1.1.3) lib/tzdata/tzdata_app.ex:13: Tzdata.App.start/2
            (kernel 10.0) application_master.erl:295: :application_master.start_it_old/4

Here are my dependencies:

defp deps do 
    [
        {:req, "~> 0.5.0"},
        {:timex, "~> 3.0"},
        {:tzdata, "~> 1.1", override: true}
   ]
end

Note: I put override property to be true because I found a github issues stating that that would fix issue but it didn’t.

Looking at the error, I see the reason is a :enotdir error which is correct, the project is actually on /home/daniel/personal/projects/blud not /home/daniel/personal/projects/blud/blud/. I don’t know where tzdata pkg is getting that path from. Also looking at the docs for tzdata give no insight into solving this problem as I have tried almost all config stated in the docs. Though the application compiles normally and work when I try in iex but when I use the CLI built using escript that when the tzdata pops up.


Please does anyone know how to go about this? Thanks!!!

:waving_hand:

In my experience that error usually means :tzdata couldn’t create the directory to store or read the downloaded and processed tzdata due to e.g. permissions issues (:tzdata “ignores” the “real” error from File.mkdir_p/1 here and then fails with a less descriptive enoent error in File.ls! here). The path can be configured with something like

config :tzdata, :data_dir, "/some/other/path"

in one of your config/*.exs files.

By default it’s Application.app_dir(:tzdata, "priv") which seems to evaluate to /home/daniel/personal/projects/blud/blud/tzdata/priv in your case.


Ah, just saw your error is :enotdir so it might be something else.

Thanks @ruslandoga! Yeah this somewhat worked after hacking around (I had to move the ets release from tzdata in new folder in this project and reference it in the config data_dir with ~/personal/projects/blud/priv/tzdata ). Though I got another error but I can move from there.