如何从 mix.exs 启动多个应用程序?

Posted

技术标签:

【中文标题】如何从 mix.exs 启动多个应用程序?【英文标题】:How to launch multiple applications from mix.exs? 【发布时间】:2016-11-28 04:01:29 【问题描述】:

我有一个 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 中使用监督树启动单独应用程序的正确方法是什么?

【问题讨论】:

你可以试试mix do run app1.exs, run app2.exs 【参考方案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

【讨论】:

以上是关于如何从 mix.exs 启动多个应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MIX 依赖在依赖的语义版本之前有一个“~>”?

如何设置默认的 Elixir 混合任务

Mixfile 依赖项中的“runtime: false”是啥意思?

如何从 sed 文件启动多个应用程序

如何从“右键单击”上下文菜单(Windows 资源管理器)中选择多个文件以启动同一个应用程序

如何从 mac 上的 node.js 脚本启动电子应用程序?