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

myproject/lib/app1myproject/lib/app2

它们都有使用Application的文件:

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

它们各自实现start并生成监督树。

myproject/mix.exs中,我尝试:

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


但是我得到的只是{app2, []}上的语法错误。

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

最佳答案

您应该将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(从十六进制,路径或git)即可。

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

关于elixir - 如何从mix.exs启动多个应用程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38557114/

10-10 04:39