Как запустить несколько приложений из mix.exs?

У меня есть приложение Elixir с двумя приложениями внутри папки lib/:

myproject/lib/app1 myproject/lib/app2

У них обоих есть файлы, которые используют Application:

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

Каждый из них реализует start и порождает дерево наблюдения.

В myproject/mix.exs я пробовал:

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

Но все, что я получаю, это синтаксические ошибки в строке с {app2, []}.

Такое вообще возможно? Если нет, то как правильно запускать отдельные приложения с деревьями контроля в Elixir?


person sheldonkreger    schedule 24.07.2016    source источник
comment
можешь попробовать mix do run app1.exs, run app2.exs   -  person coderVishal    schedule 25.07.2016


Ответы (1)


Вы должны добавить app2 в качестве зависимости от app1 и вызывать его в приложениях, например:

mix.exs для app2:

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

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

mix.exs для app1:

  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

person BurmajaM    schedule 25.07.2016