I’ve been re-arranging my code to break a larger LiveView app into smaller Live Components based on separation of concerns. In the main app I alias the component module name (BoardComponent), then render:
I’ve done this with several different components so far, with no problems. But after doing a little work today, I’m suddenly getting hit with
** (UndefinedFunctionError) function MyAppWeb.BoardComponent.__live__/0 is undefined (module MyAppWeb.BoardComponent is not available)
But not just for the BoardComponent… when I try to access a different one - same exact error:
** (UndefinedFunctionError) function MyAppWeb.PostComponent.__live__/0 is undefined (module MyAppWeb.PostComponent is not available)
Even components that were not even touched by today’s work, for some reason are “not available”. And it’s really strange… After reloading and recompiling a few times, I can get some modules to work but not others… and I’m not changing the code AT ALL - just killing and restarting mix phx.server gives different results each time.
Any ideas what could be going on? I didn’t really make any major changes today.
I fixed my own issue by making non-changes
e.g. {:ok, socket} to:
{:ok,
socket
}
doing that one-by-one for all my components, and Elixir then recompiled the files and now there are no errors. Even if I revert the changes back to {:ok, socket} it still works. Very strange…
@APB9785 sounds like something in your _build directory got weird. While I generally find that compiler issues with Elixir are rare, when they do happen, they are generally fixed for me by doing rm -rf _build
Did you by any chance compiled the code or ran the app with different versions of Elixir:
like be trying out the app inside a docker container with the entire project mapped as a volume?
or by using your software version manager tool, like asdf to run the app with different Elixir version?
If you have done this then the _build folder get’s itself in a weird state. Also when trying out new versions of Elixir you may end-up with incompatible versions in your mix.lock and deps folder.
Thanks for the info! But in this case, I didn’t do anything with docker or asdf. I was just moving around some handle_event/3 clauses after separating a settings menu into its own LC.
I just came across this same error message and I don’t think I touched the code between working and not-working states. Walked away from the computer with no compile errors, came back and refreshed a webpage on localhost and it gave the same error as OP. I commented out a couple uncommitted changes (a route and the live_view file for that route) to remove all unstaged edits to get back to the commit that I’m sure was working, and the error persisted.
** (exit) an exception was raised:
** (UndefinedFunctionError) function MyAppWeb.CheckoutLive.Show.__live__/0 is undefined (module MyAppWeb.CheckoutLive.Show is not available)
MyAppWeb.CheckoutLive.Show.__live__()
(phoenix_live_view 0.17.5) lib/phoenix_live_view/static.ex:239: Phoenix.LiveView.Static.load_live!/2
(phoenix_live_view 0.17.5) lib/phoenix_live_view/static.ex:83: Phoenix.LiveView.Static.render/3
(phoenix_live_view 0.17.5) lib/phoenix_live_view/controller.ex:38: Phoenix.LiveView.Controller.live_render/3
(phoenix 1.6.5) lib/phoenix/router.ex:355: Phoenix.Router.__call__/2
(my_app_web 0.1.0) lib/my_app_web/endpoint.ex:1: MyAppWeb.Endpoint.plug_builder_call/2
(my_app_web 0.1.0) lib/plug/debugger.ex:136: MyAppWeb.Endpoint."call (overridable 3)"/2
(my_app_web 0.1.0) lib/my_app_web/endpoint.ex:1: MyAppWeb.Endpoint.call/2
Nuked the _build to get back to working before wondering if this was an error with a resolution. Are there useful commands/spelunking to do when a _build folder gets into a confused state?