When I signup another user I get this error:
key :activity_logs not found in: %{__changed__: MapSet.new([:lists]), __configured__: %{}, __ref__: 1,
lists: %Phoenix.LiveView.LiveStream{name: :lists, dom_id: #Function<3.87984938/1 in
Phoenix.LiveView.LiveStream.new/4>, ref: "0", inserts: [], deletes: [], reset?: false}}
KeyError at GET /
Exception:
** (KeyError) key :activity_logs not found in: %{__changed__: MapSet.new([:lists]), __configured__: %{}, __ref__: 1, lists: %Phoenix.LiveView.LiveStream{name: :lists, dom_id: #Function<3.87984938/1 in Phoenix.LiveView.LiveStream.new/4>, ref: "0", inserts: [], deletes: [], reset?: false}}
(todo_trek 0.1.0) lib/todo_trek_web/live/home_live.ex:51: anonymous fn/2 in TodoTrekWeb.HomeLive.render/1
(phoenix_live_view 0.19.0) lib/phoenix_live_view/diff.ex:385: Phoenix.LiveView.Diff.traverse/7
(phoenix_live_view 0.19.0) lib/phoenix_live_view/diff.ex:537: anonymous fn/4 in Phoenix.LiveView.Diff.traverse_dynamic/7
(elixir 1.14.4) lib/enum.ex:2468: Enum."-reduce/3-lists^foldl/2-0-"/3
(phoenix_live_view 0.19.0) lib/phoenix_live_view/diff.ex:383: Phoenix.LiveView.Diff.traverse/7
(phoenix_live_view 0.19.0) lib/phoenix_live_view/diff.ex:136: Phoenix.LiveView.Diff.render/3
(phoenix_live_view 0.19.0) lib/phoenix_live_view/static.ex:252: Phoenix.LiveView.Static.to_rendered_content_tag/4
(phoenix_live_view 0.19.0) lib/phoenix_live_view/static.ex:135: Phoenix.LiveView.Static.render/3
(phoenix_live_view 0.19.0) lib/phoenix_live_view/controller.ex:39: Phoenix.LiveView.Controller.live_render/3
(phoenix 1.7.2) lib/phoenix/router.ex:430: Phoenix.Router.__call__/5
(todo_trek 0.1.0) lib/todo_trek_web/endpoint.ex:1: TodoTrekWeb.Endpoint.plug_builder_call/2
(todo_trek 0.1.0) deps/plug/lib/plug/debugger.ex:136: TodoTrekWeb.Endpoint."call (overridable 3)"/2
(todo_trek 0.1.0) lib/todo_trek_web/endpoint.ex:1: TodoTrekWeb.Endpoint.call/2
(phoenix 1.7.2) lib/phoenix/endpoint/sync_code_reload_plug.ex:22: Phoenix.Endpoint.SyncCodeReloadPlug.do_call/4
(plug_cowboy 2.6.1) lib/plug/cowboy/handler.ex:11: Plug.Cowboy.Handler.init/2
(cowboy 2.9.0) /Users/joep/Repositories/cursussen/todo_trek/deps/cowboy/src/cowboy_handler.erl:37: :cowboy_handler.execute/2
(cowboy 2.9.0) /Users/joep/Repositories/cursussen/todo_trek/deps/cowboy/src/cowboy_stream_h.erl:306: :cowboy_stream_h.execute/3
(cowboy 2.9.0) /Users/joep/Repositories/cursussen/todo_trek/deps/cowboy/src/cowboy_stream_h.erl:295: :cowboy_stream_h.request_process/3
(stdlib 4.3) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Code:
lib/todo_trek_web/live/home_live.ex
46 list={list}
47 />
48 </div>
49 </div>
50 </div>
51> <Timeline.activity_logs stream={@streams.activity_logs} page={@page} end_of_timeline?={@end_of_timeline?}/>
52 </div>
53 <.modal
54 :if={@live_action in [:new_list, :edit_list]}
55 id="list-modal"
56 show
lib/phoenix_live_view/diff.ex
380 changed?
381 ) do
382 {_counter, diff, children, pending, components, template} =
383 traverse_dynamic(
384 socket,
385> invoke_dynamic(rendered, false),
386 %{},
387 pending,
388 components,
389 template,
390 changed?
lib/phoenix_live_view/diff.ex
532 Enum.reduce(dynamic, {0, %{}, children, pending, components, template}, fn
533 entry, {counter, diff, children, pending, components, template} ->
534 child = Map.get(children, counter)
535
536 {serialized, child_fingerprint, pending, components, template} =
537> traverse(socket, entry, child, pending, components, template, changed?)
538
539 # If serialized is nil, it means no changes.
540 # If it is an empty map, then it means it is a rendered struct
541 # that did not change, so we don't have to emit it either.
542 diff =
lib/enum.ex
lib/phoenix_live_view/diff.ex
378 components,
379 template,
380 changed?
381 ) do
382 {_counter, diff, children, pending, components, template} =
383> traverse_dynamic(
384 socket,
385 invoke_dynamic(rendered, false),
386 %{},
387 pending,
388 components,
lib/phoenix_live_view/diff.ex
131 render(%{socket | fingerprints: new_fingerprints()}, rendered, new_components(uuids))
132 end
133
134 def render(%{fingerprints: prints} = socket, %Rendered{} = rendered, components) do
135 {diff, prints, pending, components, nil} =
136> traverse(socket, rendered, prints, %{}, components, nil, true)
137
138 # cid_to_component is used by maybe_reuse_static and it must be a copy before changes.
139 # However, given traverse does not change cid_to_component, we can read it now.
140 {cid_to_component, _, _} = components
141
lib/phoenix_live_view/static.ex
247 Phoenix.HTML.Tag.content_tag(tag, "", attrs)
248 end
249
250 defp to_rendered_content_tag(socket, tag, view, attrs) do
251 rendered = Utils.to_rendered(socket, view)
252> {_, diff, _} = Diff.render(socket, rendered, Diff.new_components())
253 Phoenix.HTML.Tag.content_tag(tag, {:safe, Diff.to_iodata(diff)}, attrs)
254 end
255
256 defp load_live!(view_or_component, kind) do
257 case view_or_component.__live__() do
lib/phoenix_live_view/static.ex
130 {:data, data_attrs}
131 | extended_attrs
132 ]
133
134 try do
135> {:ok, to_rendered_content_tag(socket, tag, view, attrs), socket.assigns}
136 catch
137 :throw, {:phoenix, :child_redirect, redirected, flash} ->
138 {:stop, Utils.replace_flash(%{socket | redirected: redirected}, flash)}
139 end
140
lib/phoenix_live_view/controller.ex
34 end
35 end
36
37 """
38 def live_render(%Plug.Conn{} = conn, view, opts \\ []) do
39> case LiveView.Static.render(conn, view, opts) do
40 {:ok, content, socket_assigns} ->
41 conn
42 |> Phoenix.Controller.put_view(LiveView.Static)
43 |> Phoenix.Controller.render(
44 "template.html",
lib/phoenix/router.ex
425 :telemetry.execute([:phoenix, :router_dispatch, :stop], measurements, metadata)
426 halted_conn
427
428 %Plug.Conn{} = piped_conn ->
429 try do
430> plug.call(piped_conn, plug.init(opts))
431 else
432 conn ->
433 measurements = %{duration: System.monotonic_time() - start}
434 metadata = %{metadata | conn: conn}
435 :telemetry.execute([:phoenix, :router_dispatch, :stop], measurements, metadata)
lib/todo_trek_web/endpoint.ex
1> defmodule TodoTrekWeb.Endpoint do
2 use Phoenix.Endpoint, otp_app: :todo_trek
3
4 # The session will be stored in the cookie and signed,
5 # this means its contents can be read but not tampered with.
6 # Set :encryption_salt if you would also like to encrypt it.
deps/plug/lib/plug/debugger.ex
131 case conn do
132 %Plug.Conn{path_info: ["__plug__", "debugger", "action"], method: "POST"} ->
133 Plug.Debugger.run_action(conn)
134
135 %Plug.Conn{} ->
136> super(conn, opts)
137 end
138 rescue
139 e in Plug.Conn.WrapperError ->
140 %{conn: conn, kind: kind, reason: reason, stack: stack} = e
141 Plug.Debugger.__catch__(conn, kind, reason, stack, @plug_debugger)
lib/todo_trek_web/endpoint.ex
1> defmodule TodoTrekWeb.Endpoint do
2 use Phoenix.Endpoint, otp_app: :todo_trek
3
4 # The session will be stored in the cookie and signed,
5 # this means its contents can be read but not tampered with.
6 # Set :encryption_salt if you would also like to encrypt it.
lib/phoenix/endpoint/sync_code_reload_plug.ex
17
18 def call(conn, {endpoint, opts}), do: do_call(conn, endpoint, opts, true)
19
20 defp do_call(conn, endpoint, opts, retry?) do
21 try do
22> endpoint.call(conn, opts)
23 rescue
24 exception in [UndefinedFunctionError] ->
25 case exception do
26 %UndefinedFunctionError{module: ^endpoint} when retry? ->
27 # Sync with the code reloader and retry once
lib/plug/cowboy/handler.ex
6 def init(req, {plug, opts}) do
7 conn = @connection.conn(req)
8
9 try do
10 conn
11> |> plug.call(opts)
12 |> maybe_send(plug)
13 |> case do
14 %Plug.Conn{adapter: {@connection, %{upgrade: {:websocket, websocket_args}} = req}} = conn ->
15 {handler, state, cowboy_opts} = websocket_args
16 {__MODULE__, copy_resp_headers(conn, req), {handler, state}, cowboy_opts}
/Users/joep/Repositories/cursussen/todo_trek/deps/cowboy/src/cowboy_handler.erl
32 -optional_callbacks([terminate/3]).
33
34 -spec execute(Req, Env) -> {ok, Req, Env}
35 when Req::cowboy_req:req(), Env::cowboy_middleware:env().
36 execute(Req, Env=#{handler := Handler, handler_opts := HandlerOpts}) ->
37> try Handler:init(Req, HandlerOpts) of
38 {ok, Req2, State} ->
39 Result = terminate(normal, Req2, State, Handler),
40 {ok, Req2, Env#{result => Result}};
41 {Mod, Req2, State} ->
42 Mod:upgrade(Req2, Env, Handler, State);
/Users/joep/Repositories/cursussen/todo_trek/deps/cowboy/src/cowboy_stream_h.erl
301 end.
302
303 execute(_, _, []) ->
304 ok;
305 execute(Req, Env, [Middleware|Tail]) ->
306> case Middleware:execute(Req, Env) of
307 {ok, Req2, Env2} ->
308 execute(Req2, Env2, Tail);
309 {suspend, Module, Function, Args} ->
310 proc_lib:hibernate(?MODULE, resume, [Env, Tail, Module, Function, Args]);
311 {stop, _Req2} ->
/Users/joep/Repositories/cursussen/todo_trek/deps/cowboy/src/cowboy_stream_h.erl
290 %% to simplify the debugging of errors. The proc_lib library
291 %% already adds the stacktrace to other types of exceptions.
292 -spec request_process(cowboy_req:req(), cowboy_middleware:env(), [module()]) -> ok.
293 request_process(Req, Env, Middlewares) ->
294 try
295> execute(Req, Env, Middlewares)
296 catch
297 exit:Reason={shutdown, _}:Stacktrace ->
298 erlang:raise(exit, Reason, Stacktrace);
299 exit:Reason:Stacktrace when Reason =/= normal, Reason =/= shutdown ->
300 erlang:raise(exit, {Reason, Stacktrace}, Stacktrace)
proc_lib.erl
Connection details
Params
Request info
Headers
- accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7
- accept-encoding: gzip, deflate, br
- accept-language: en-US,en;q=0.9
- cache-control: max-age=0
- connection: keep-alive
- cookie: locale=en; _todo_trek_key=SFMyNTY.g3QAAAADbQAAAA5saXZlX3NvY2tldF9pZG0AAAA7dXNlcnNfc2Vzc2lvbnM6MERudHFGRE4xdlU1VXp0RWNDWGNodzJ2UERESXA2Q3Fka2NWTnpCUDdDVT1tAAAADXBob2VuaXhfZmxhc2h0AAAAAW0AAAAEaW5mb20AAAAdQWNjb3VudCBjcmVhdGVkIHN1Y2Nlc3NmdWxseSFtAAAACnVzZXJfdG9rZW5tAAAAINA57ahQzdb1OVM7RHAl3IcNrzwwyKegqnZHFTcwT-wl.CiW12cmteDAEIdcYXEiMXPXw5T6yZIqJyZdGO1n9OQU
- dnt: 1
- host: localhost:4000
- referer: http://localhost:4000/users/register
- sec-ch-ua: "Chromium";v="113", "Not-A.Brand";v="24"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "macOS"
- sec-fetch-dest: document
- sec-fetch-mode: navigate
- sec-fetch-site: same-origin
- sec-fetch-user: ?1
- upgrade-insecure-requests: 1
- user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36
Session
%{"live_socket_id" => "users_sessions:0DntqFDN1vU5UztEcCXchw2vPDDIp6CqdkcVNzBP7CU=", "phoenix_flash" => %{"info" => "Account created successfully!"}, "user_token" => <<208, 57, 237, 168, 80, 205, 214, 245, 57, 83, 59, 68, 112, 37, 220, 135, 13, 175, 60, 48, 200, 167, 160, 170, 118, 71, 21, 55, 48, 79, 236, 37>>}