You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带Supervisor的GenServer作为Elixir Application启动?

问题原因

你在mix.exs中配置了mod: {App, []},但代码里根本没有定义App模块。Elixir启动应用时,会调用mod指定模块的start/2函数初始化应用,因此会报错找不到该模块及对应函数。

解决方法

两种修复方式选其一即可:

方式一:新增App模块作为应用入口

在todos/lib/目录下创建app.ex文件(或直接在现有todos.exs末尾添加),实现Application行为:

defmodule App do
  use Application

  @impl true
  def start(_type, _args) do
    # 启动监督树
    App.Supervisor.start()
  end
end

保持mix.exs中的mod: {App, []}配置不变,重新启动应用即可。

方式二:直接用现有Supervisor作为应用入口

修改App.Supervisor模块,新增符合Application调用规范的start/2函数:

defmodule App.Supervisor do
  use Supervisor

  # 新增start/2,适配Application的调用要求
  def start(_type, _args) do
    Supervisor.start_link(__MODULE__, [])
  end

  def init(_) do
     children = [
      {App.Service,[]}
     ]
     Supervisor.init(children, strategy: :one_for_one)
  end
end

然后修改mix.exs中的mod配置:

mod: {App.Supervisor, []}

重新启动应用即可。

额外建议

Elixir遵循模块名与文件名对应的约定,比如App.Service建议放在todos/lib/app/service.ex,App.Supervisor放在todos/lib/app/supervisor.ex,这样项目结构更清晰,也符合社区规范。

内容的提问来源于stack exchange,提问作者William

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:01:15