Tzdata error (via timex) - no match of right hand side value - phoenix won't start

[info] Application tzdata exited: 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, {{:badmatch, {:error, {:read_error, {:file_error, [47, 85, 115, 101, 114, 115, 47, 112, 97, 117, 108, 98, 104, 97, 114, 116, 122, 111, 103, 47, 80, 101, 114, 115, 111, 110, 97, 108, 47, 119, 111, 114, 107, 32, ...], :enoent}}}}, [{Tzdata.EtsHolder, :load_ets_table, 1, [file: 'lib/tzdata/ets_holder.ex', line: 63]}, {Tzdata.EtsHolder, :load_release, 0, [file: 'lib/tzdata/ets_holder.ex', line: 56]}, {:gen_server, :init_it, 2, [file: 'gen_server.erl', line: 374]}, {:gen_server, :init_it, 6, [file: 'gen_server.erl', line: 342]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 249]}]}}}}
            (tzdata 1.0.5) lib/tzdata/tzdata_app.ex:17: Tzdata.App.start/2
            (kernel 6.5.2) application_master.erl:277: :application_master.start_it_old/4
** (Mix) 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, {{:badmatch, {:error, {:read_error, {:file_error, [47, 85, 115, 101, 114, 115, 47, 112, 97, 117, 108, 98, 104, 97, 114, 116, 122, 111, 103, 47, 80, 101, 114, 115, 111, 110, 97, 108, 47, 119, 111, 114, 107, 32, ...], :enoent}}}}, [{Tzdata.EtsHolder, :load_ets_table, 1, [file: 'lib/tzdata/ets_holder.ex', line: 63]}, {Tzdata.EtsHolder, :load_release, 0, [file: 'lib/tzdata/ets_holder.ex', line: 56]}, {:gen_server, :init_it, 2, [file: 'gen_server.erl', line: 374]}, {:gen_server, :init_it, 6, [file: 'gen_server.erl', line: 342]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 249]}]}}}}
            (tzdata 1.0.5) lib/tzdata/tzdata_app.ex:17: Tzdata.App.start/2
            (kernel 6.5.2) application_master.erl:277: :application_master.start_it_old/4
[os_mon] cpu supervisor port (cpu_sup): Erlang has closed

In a nutshell, I have verified Erlang, Elixir, etc. are all installed and working correctly. Phoenix was running fine for months, and suddenly it isn’t. I have not updated the machine or installed other things or moved libs or anything at all. And yet something has changed.

Timex uses tzdata, and tzdata now dies with the error above.
The ‘load_ets_table’ function seems fine, and the required ‘ets’ file is in place where it belongs.

I have removed deps, rebuilt, changed versions of installed deps, etc. and nothing solves the problem.

My preference would be to understand the problem and why it is happening, but in lieu of that I’ll take a generic solution. Thx.

Tzdata does automatically keep up to date with the latest IANA timezone db releases unless explicitly disabled. There seems to have been an update on 29.12.2020. So it might be related to that db or at least the update to it.

4 Likes

In case it helps anyone help me:
my versions:

      {:timex, "~> 3.6.3"},
      {:tzdata, "~> 1.0.0"},

and I’m on a Mac running Mojave…

and I’ve also tried multiple release_ets files (2020f.v2.ets, etc.)

I’ve fixed this. I’m sharing the problem and solution in case anyone else runs into this.

Basically, tzdata cannot handle extended characters being in the filename path.

Since I work on a Mac I had placed the Option-F character ƒ on a folder in the directory structure above my application.

So the solution is: DO NOT DO THIS :slight_smile:

5 Likes