elixir-cldr / cldr

Elixir implementation of CLDR/ICU
Other
447 stars 33 forks source link

Some Cldr.Code.ensure_compiled? failures #141

Closed seb3s closed 3 years ago

seb3s commented 3 years ago

Hello, following the https://github.com/seb3s/kandesk/issues/4 fix, I noticed that I also have some other compilations that fails with :unavailable error.

I added a log as below :

defmodule Cldr.Code do
  @moduledoc false

  # Provides a backwards compatible version of
  # the deprecated `Code.ensure_compiled?/1`

  require Logger

  @doc false
  def ensure_compiled?(module) do
    case Code.ensure_compiled(module) do
      {:module, _} ->
        true

      {:error, error} ->
        Logger.info("module #{module} ensure_compiled error: #{inspect(error)}")
        false
    end
  end
end

Then when running mix compile on my project (kandesk) I get this somewhere in the log :

11:10:11.351 [info]  module Elixir.CalendarInterval ensure_compiled error: :unavailable

11:10:11.360 [info]  module Elixir.CalendarInterval ensure_compiled error: :unavailable

11:10:11.366 [info]  module Elixir.CalendarInterval ensure_compiled error: :unavailable

11:10:11.370 [info]  module Elixir.CalendarInterval ensure_compiled error: :unavailable

11:10:11.452 [info]  module Elixir.CalendarInterval ensure_compiled error: :unavailable

11:10:11.457 [info]  module Elixir.CalendarInterval ensure_compiled error: :unavailable

11:10:11.566 [info]  module Elixir.CalendarInterval ensure_compiled error: :unavailable

11:10:11.572 [info]  module Elixir.CalendarInterval ensure_compiled error: :unavailable

11:10:11.577 [info]  module Elixir.CalendarInterval ensure_compiled error: :unavailable

11:10:11.582 [info]  module Elixir.CalendarInterval ensure_compiled error: :unavailable

So I suspect some code is not compiled as intended. Right now I haven't noticed any side effects but I'm not currently using all the provided functions.

Hope this helps, cheers

Sébastien.

kipcole9 commented 3 years ago

calendar_interval is an optional package and depending on whether its configured in mix.exs certain functionality is enabled. So these particular errors are entirely expected.

For the original issue I have to debug some more because what you are seeing is unexpected. The workaround working is good. I may not get to further debugging until the weekend though.

kipcole9 commented 3 years ago

Whats curious is that if I do mix compile --force in :dev mode it compiles fine (on my machine). If I MIX_ENV=test mix compile --force then I see the error.

Do you see the same?

seb3s commented 3 years ago

I've got some 16:26:58.909 [info] module Elixir.CalendarInterval ensure_compiled error: :unavailable in both cases

kipcole9 commented 3 years ago

I expect that message since you don't have {:calendar_interval, "~> 0.2"} in your mix.exs. That's not an error.

The issue you raised was related to:

== Compilation error in file lib/kandesk_web/router.ex ==
** (Cldr.UnknownBackendError) The backend KandeskWeb.Cldr is not known or not a backend module.
    (ex_cldr 2.16.2) lib/cldr/plug/plug_set_locale.ex:480: Cldr.Plug.SetLocale.validate_cldr/2
    (ex_cldr 2.16.2) lib/cldr/plug/plug_set_locale.ex:175: Cldr.Plug.SetLocale.init/1

I do not get this compiling in :dev but I do with :test which is unexpected.

seb3s commented 3 years ago

Sorry for misunderstanding ! Yes I do have the same behaviour. No error in dev but only in test.

kipcole9 commented 3 years ago

OK, thanks for confirming. At least we have consistent results! Gives me something to think about, but probably not until the weekend; hope thats ok.

seb3s commented 3 years ago

Yes, in the mean time, I've added require KandeskWeb.Cldr in router.ex as suggested.