基于Elixir+Phoenix开发Windows桌面应用无法启动窗口求助
解决方案
你遇到的问题是没有把桌面窗口的启动逻辑加入Phoenix的应用启动树,而且默认Phoenix的浏览器自动启动配置也没关,按下面最小步骤修改就能实现需求:
步骤1:调整Phoenix端点配置
打开 config/dev.exs,修改Endpoint配置块,禁用自动打开浏览器,同时强制启动Phoenix服务:
config :hello, HelloWeb.Endpoint, server: true, open_browser: false, # 其余原有配置(http端口、live_reload等)全部保留即可 ...
生产环境配置同理修改对应config文件即可。
步骤2:修改应用启动入口
打开 lib/hello/application.ex,重写start/2函数,将桌面窗口进程加入应用监督树:
defmodule Hello.Application do use Application @impl true def start(_type, _args) do # 初始化桌面运行环境 Desktop.Window.prepare_start() children = [ HelloWeb.Telemetry, {Phoenix.PubSub, name: Hello.PubSub}, HelloWeb.Endpoint, # 新增桌面窗口进程配置 {Desktop.Window, [ app: :hello, id: HelloMainWindow, title: "Hello World", size: {800, 600}, # 自动读取Phoenix服务的启动地址,不需要硬编码端口 url: &HelloWeb.Endpoint.url/0 ]} ] opts = [strategy: :one_for_one, name: Hello.Supervisor] Supervisor.start_link(children, opts) end # 原有config_change函数保留即可 @impl true def config_change(changed, _new, removed) do HelloWeb.Endpoint.config_change(changed, removed) :ok end end
步骤3:启动验证
执行命令前先确认依赖安装完成:mix deps.get
随后直接运行启动命令即可弹出桌面窗口,不需要其他额外配置:iex -S mix
你之前使用的mix iex -S属于命令拼写错误,缺省了后续参数,也是启动无响应的原因之一。
内容的提问来源于stack exchange,提问作者Flame_Phoenix
相关产品推荐
相关产品推荐

