3

我有一个 Elixir 应用程序,其中 lib/ 文件夹中有两个应用程序:

myproject/lib/app1 myproject/lib/app2

他们都有使用应用程序的文件:

myproject/lib/app1.exs myproject/lib/app2.exs

他们每个人都实现start并产生一个监督树。

myproject/mix.exs我尝试过:

  def application do
    [
      mod: {app1, []},
           {app2, []},
      applications: [:foo, :bar]
    ]
  end

但我得到的只是与{app2, []}.

这样的事情甚至可能吗?如果不是,那么在 Elixir 中使用监督树启动单独应用程序的正确方法是什么?

4

1 回答 1

1

您应该将 app2 添加为 app1 的依赖项并在应用程序中调用它,例如:

app2 的 mix.exs:

  #...
  def application do
    [
      mod: {My.App2, []},
      applications: [:logger]
    ]
  end

  defp deps do
    [
      ...
    ]
  end
  #...
end

app1 的 mix.exs:

  def application do
    [
      mod: {My.App1, []},
      applications: [:logger, :my_app2]
    ]
  end

  defp deps do
    [
      {:my_app2, in_umbrella: true}
    ]
  end
  # ...
end

如果两个应用程序在同一个保护伞中,就是这种情况。如果没有,只需添加 my_app2 (来自 hex、path 或 git)。

有关依赖项和总括项目的更多信息,请查看@http: //elixir-lang.org/getting-started/mix-otp/dependencies-and-umbrella-apps.html

于 2016-07-25T09:02:32.780 回答