phoenixframework / phoenix_live_reload

Provides live-reload functionality for Phoenix
MIT License
315 stars 90 forks source link

v1.5.0 broken in Elixir 1.14.0 (Version 1.4.1 was fine) #149

Closed tzugen closed 6 months ago

tzugen commented 6 months ago

On Debian 12, using Elixir 1.14.0 inotify-tools installed.

I get the following stacktrace with live reload 1.5.0 and Livereload is not functional

[error] GenServer #PID<0.1203.0> terminating
** (UndefinedFunctionError) function Code.loaded?/1 is undefined or private
    (elixir 1.14.0) Code.loaded?(Mix.Project)
    (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:135: Phoenix.LiveReloader.Channel.deps_paths/0
    (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:29: Phoenix.LiveReloader.Channel.join/3
    (phoenix 1.7.11) lib/phoenix/channel/server.ex:391: Phoenix.Channel.Server.channel_join/4
    (phoenix 1.7.11) lib/phoenix/channel/server.ex:305: Phoenix.Channel.Server.handle_info/2
    (stdlib 4.2) gen_server.erl:1123: :gen_server.try_dispatch/4
    (stdlib 4.2) gen_server.erl:1200: :gen_server.handle_msg/6
    (stdlib 4.2) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Last message: {Phoenix.Channel, %{}, {#PID<0.1070.0>, #Reference<0.2013432216.4018667523.192769>}, %Phoenix.Socket{assigns: %{}, channel: Phoenix.LiveReloader.Channel, channel_pid: nil, endpoint: EventsWeb.Endpoint, handler: Phoenix.LiveReloader.Socket, id: nil, joined: false, join_ref: "35", private: %{}, pubsub_server: Events.PubSub, ref: nil, serializer: Phoenix.Socket.V2.JSONSerializer, topic: "phoenix:live_reload", transport: :websocket, transport_pid: #PID<0.1070.0>}}
State: #Reference<0.2013432216.4018667523.192771>
[error] an exception was raised:
    ** (UndefinedFunctionError) function Code.loaded?/1 is undefined or private
        (elixir 1.14.0) Code.loaded?(Mix.Project)
        (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:135: Phoenix.LiveReloader.Channel.deps_paths/0
        (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:29: Phoenix.LiveReloader.Channel.join/3
        (phoenix 1.7.11) lib/phoenix/channel/server.ex:391: Phoenix.Channel.Server.channel_join/4
        (phoenix 1.7.11) lib/phoenix/channel/server.ex:305: Phoenix.Channel.Server.handle_info/2
        (stdlib 4.2) gen_server.erl:1123: :gen_server.try_dispatch/4
        (stdlib 4.2) gen_server.erl:1200: :gen_server.handle_msg/6
        (stdlib 4.2) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
[error] GenServer #PID<0.1208.0> terminating
** (UndefinedFunctionError) function Code.loaded?/1 is undefined or private
    (elixir 1.14.0) Code.loaded?(Mix.Project)
    (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:135: Phoenix.LiveReloader.Channel.deps_paths/0
    (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:29: Phoenix.LiveReloader.Channel.join/3
    (phoenix 1.7.11) lib/phoenix/channel/server.ex:391: Phoenix.Channel.Server.channel_join/4
    (phoenix 1.7.11) lib/phoenix/channel/server.ex:305: Phoenix.Channel.Server.handle_info/2
    (stdlib 4.2) gen_server.erl:1123: :gen_server.try_dispatch/4
    (stdlib 4.2) gen_server.erl:1200: :gen_server.handle_msg/6
    (stdlib 4.2) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Last message: {Phoenix.Channel, %{}, {#PID<0.1070.0>, #Reference<0.2013432216.4018667523.192841>}, %Phoenix.Socket{assigns: %{}, channel: Phoenix.LiveReloader.Channel, channel_pid: nil, endpoint: EventsWeb.Endpoint, handler: Phoenix.LiveReloader.Socket, id: nil, joined: false, join_ref: "36", private: %{}, pubsub_server: Events.PubSub, ref: nil, serializer: Phoenix.Socket.V2.JSONSerializer, topic: "phoenix:live_reload", transport: :websocket, transport_pid: #PID<0.1070.0>}}
State: #Reference<0.2013432216.4018667523.192843>
[error] an exception was raised:
    ** (UndefinedFunctionError) function Code.loaded?/1 is undefined or private
        (elixir 1.14.0) Code.loaded?(Mix.Project)
        (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:135: Phoenix.LiveReloader.Channel.deps_paths/0
        (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:29: Phoenix.LiveReloader.Channel.join/3
        (phoenix 1.7.11) lib/phoenix/channel/server.ex:391: Phoenix.Channel.Server.channel_join/4
        (phoenix 1.7.11) lib/phoenix/channel/server.ex:305: Phoenix.Channel.Server.handle_info/2
        (stdlib 4.2) gen_server.erl:1123: :gen_server.try_dispatch/4
        (stdlib 4.2) gen_server.erl:1200: :gen_server.handle_msg/6
        (stdlib 4.2) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
[error] GenServer #PID<0.1213.0> terminating
** (UndefinedFunctionError) function Code.loaded?/1 is undefined or private
    (elixir 1.14.0) Code.loaded?(Mix.Project)
    (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:135: Phoenix.LiveReloader.Channel.deps_paths/0
    (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:29: Phoenix.LiveReloader.Channel.join/3
    (phoenix 1.7.11) lib/phoenix/channel/server.ex:391: Phoenix.Channel.Server.channel_join/4
    (phoenix 1.7.11) lib/phoenix/channel/server.ex:305: Phoenix.Channel.Server.handle_info/2
    (stdlib 4.2) gen_server.erl:1123: :gen_server.try_dispatch/4
    (stdlib 4.2) gen_server.erl:1200: :gen_server.handle_msg/6
    (stdlib 4.2) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Last message: {Phoenix.Channel, %{}, {#PID<0.1070.0>, #Reference<0.2013432216.4018667523.192930>}, %Phoenix.Socket{assigns: %{}, channel: Phoenix.LiveReloader.Channel, channel_pid: nil, endpoint: EventsWeb.Endpoint, handler: Phoenix.LiveReloader.Socket, id: nil, joined: false, join_ref: "37", private: %{}, pubsub_server: Events.PubSub, ref: nil, serializer: Phoenix.Socket.V2.JSONSerializer, topic: "phoenix:live_reload", transport: :websocket, transport_pid: #PID<0.1070.0>}}
State: #Reference<0.2013432216.4018667523.192932>
[error] an exception was raised:
    ** (UndefinedFunctionError) function Code.loaded?/1 is undefined or private
        (elixir 1.14.0) Code.loaded?(Mix.Project)
        (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:135: Phoenix.LiveReloader.Channel.deps_paths/0
        (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:29: Phoenix.LiveReloader.Channel.join/3
        (phoenix 1.7.11) lib/phoenix/channel/server.ex:391: Phoenix.Channel.Server.channel_join/4
        (phoenix 1.7.11) lib/phoenix/channel/server.ex:305: Phoenix.Channel.Server.handle_info/2
        (stdlib 4.2) gen_server.erl:1123: :gen_server.try_dispatch/4
        (stdlib 4.2) gen_server.erl:1200: :gen_server.handle_msg/6
        (stdlib 4.2) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
[error] GenServer #PID<0.1218.0> terminating
** (UndefinedFunctionError) function Code.loaded?/1 is undefined or private
    (elixir 1.14.0) Code.loaded?(Mix.Project)
    (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:135: Phoenix.LiveReloader.Channel.deps_paths/0
    (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:29: Phoenix.LiveReloader.Channel.join/3
    (phoenix 1.7.11) lib/phoenix/channel/server.ex:391: Phoenix.Channel.Server.channel_join/4
    (phoenix 1.7.11) lib/phoenix/channel/server.ex:305: Phoenix.Channel.Server.handle_info/2
    (stdlib 4.2) gen_server.erl:1123: :gen_server.try_dispatch/4
    (stdlib 4.2) gen_server.erl:1200: :gen_server.handle_msg/6
    (stdlib 4.2) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Last message: {Phoenix.Channel, %{}, {#PID<0.1070.0>, #Reference<0.2013432216.4018667523.192963>}, %Phoenix.Socket{assigns: %{}, channel: Phoenix.LiveReloader.Channel, channel_pid: nil, endpoint: EventsWeb.Endpoint, handler: Phoenix.LiveReloader.Socket, id: nil, joined: false, join_ref: "39", private: %{}, pubsub_server: Events.PubSub, ref: nil, serializer: Phoenix.Socket.V2.JSONSerializer, topic: "phoenix:live_reload", transport: :websocket, transport_pid: #PID<0.1070.0>}}
State: #Reference<0.2013432216.4018667523.192965>
[error] an exception was raised:
    ** (UndefinedFunctionError) function Code.loaded?/1 is undefined or private
        (elixir 1.14.0) Code.loaded?(Mix.Project)
        (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:135: Phoenix.LiveReloader.Channel.deps_paths/0
        (phoenix_live_reload 1.5.0) lib/phoenix_live_reload/channel.ex:29: Phoenix.LiveReloader.Channel.join/3
        (phoenix 1.7.11) lib/phoenix/channel/server.ex:391: Phoenix.Channel.Server.channel_join/4
        (phoenix 1.7.11) lib/phoenix/channel/server.ex:305: Phoenix.Channel.Server.handle_info/2
        (stdlib 4.2) gen_server.erl:1123: :gen_server.try_dispatch/4
        (stdlib 4.2) gen_server.erl:1200: :gen_server.handle_msg/6
        (stdlib 4.2) proc_lib.erl:240: :proc_lib.init_p_do_apply/3

Upon downgrading to 1.4.1 everything works.

tzugen commented 6 months ago

(i am following the "Build a real-time Twitter clone in 15 minutes with LiveView and Phoenix 1.5" tutorial)

josevalim commented 6 months ago

Fixed. We were uising a function avai9lable only on Elixir v1.15+. Go with 1.5.1 or 1.4.1, both are fine. :)

tzugen commented 6 months ago

Just to report back, everything is working fine now with 1.5.1 and Elixir 1.14. Thanks for the super fast feedback :)