I have Phoenix umbrella application. When inside said application, I can run it without issues if MIX_ENV=prod
. However, if I do mix test
while MIX_ENV=dev
, I get an error.
The error I have is as follows:
18:39:42.101 [error] ** wx object server {:local, WebInterface} terminating
** Last message in was {:"$gen_cast", {:show, &WebInterface.Endpoint.url/0}}
** When Server state == %Desktop.Window{
module: nil,
taskbar: nil,
frame: {:wx_ref, 35, :wxFrame, []},
notifications: %{},
webview: {:wx_ref, 49, :wxWebView, []},
home_url: &WebInterface.Endpoint.url/0,
last_url: nil,
title: "Market Manager",
rebuild: 0,
rebuild_timer: {:interval, #Reference<0.2679771817.2635857922.255366>}
}
** Reason for termination ==
** {:badarg,
[
{:erlang, :binary_to_existing_atom,
["Elixir.WebInterface.Endpoint.HTTP", :utf8],
[error_info: %{module: :erl_erts_errors}]},
{:elixir_aliases, :safe_concat, 1,
[file: ~c"src/elixir_aliases.erl", line: 139]},
{WebInterface.Endpoint, :url, 0,
[file: ~c"lib/web_interface/endpoint.ex", line: 4]},
{Desktop.Window, :prepare_url, 1,
[file: ~c"lib/desktop/window.ex", line: 666]},
{Desktop.Window, :handle_cast, 2,
[file: ~c"lib/desktop/window.ex", line: 604]},
{:wx_object, :handle_msg, 5, [file: ~c"wx_object.erl", line: 493]},
{:proc_lib, :init_p_do_apply, 3, [file: ~c"proc_lib.erl", line: 241]}
]}
Reading this, I understand the problem comes from my application.ex
, namely:
@impl true
def start(_type, _args) do
children = [
Telemetry,
{Phoenix.PubSub, name: PubSub},
Endpoint,
Manager,
%{
id: Desktop.Window,
start:
{Desktop.Window, :start_link,
[
[
app: :web_interface,
id: WebInterface,
title: "Market Manager",
size: WindowUtils.calculate_window_size(0.6, 0.8),
menubar: MenuBar,
icon: "static/images/resized_logo_5_32x32.png",
url: &WebInterface.Endpoint.url/0 # This line seems to be a problem
]
]},
restart: :transient,
shutdown: 5_000
}
]
opts = [strategy: :one_for_one, name: WebInterface.Supervisor]
Supervisor.start_link(children, opts)
end
After reading more on the subject I changed my config/test.exs
to this:
import Config
config :web_interface, WebInterface.Endpoint,
http: [ip: {127, 0, 0, 1}, port: 4002],
secret_key_base: "some_key",
server: true,
check_origin: false
But this still does not fix the issue.
In contrast, this is my config/prod.exs
:
config :web_interface, WebInterface.Endpoint,
http: [ip: {127, 0, 0, 1}, port: 80],
cache_static_manifest: "priv/static/cache_manifest.json",
secret_key_base: "some_key",
check_origin: false,
server: true
But the issue still occurs.
Turns out that in a previous launch of the application, wxWidgets (the process) had exited in a bad state. Perhaps it crashed or something else happened, but what matters here is that trying to restart it was impossible.
I had to restart my machine to start everything in a new clean state.
I also deleted the _build
folder to be sure.
This solved the issue.