MIX_ENV=test 时无法启动 Elixir 桌面应用程序

问题描述 投票:0回答:1

背景

我有凤凰伞应用程序。当在所述应用程序中时,如果

MIX_ENV=prod
,我可以毫无问题地运行它。但是,如果我在
mix test
时执行
MIX_ENV=dev
,则会收到错误。

问题

我的错误如下:

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]}
 ]}

读到这里,我明白问题来自我的

application.ex
,即:

@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

阅读更多有关该主题的内容后,我将

config/test.exs
更改为:

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

但这仍然不能解决问题。

相比之下,这是我的

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

但是问题仍然出现。

问题

  • 为什么我会遇到这个问题?
  • 我该如何修复它?
elixir desktop phoenix-live-view
1个回答
0
投票

该错误消息表明 wxWidgets 有问题。我猜测 Desktop.Window 正在使用 wxWidgets。确保 wxWidgets 正常工作的一种方法是尝试启动 Erlang 观察器。在 iex 中执行此操作:

:observer.start()

如果观察者正确启动,那么 wxWidgets 就没有问题,问题出在其他地方。如果它没有启动,那么您需要找出 wxWidgets 出了什么问题。

我不确定为什么桌面的行为与测试和生产不同。

© www.soinside.com 2019 - 2024. All rights reserved.