mix run завершает мои программы

Я изо всех сил пытался обдумать это и надеялся, что кто-то сможет указать мне правильное направление.

Я запустил mix new my_other_app --sup и получил следующее приложение:

defmodule MyOtherApp do

  def start_link do
    Task.start_link(fn -> loop() end)
  end

  def loop do
    IO.puts "running..."
    :timer.sleep(1000)
    loop()
  end
end

И мой руководитель приложения:

defmodule MyOtherApp.Application do
  use Application

  def start(_type, _args) do
    import Supervisor.Spec, warn: false

    children = [
      worker(MyOtherApp, [])
    ]

    opts = [strategy: :one_for_one, name: MyOtherApp.Supervisor]
    Supervisor.start_link(children, opts)
  end
end

и смешать application/0

def application do
  [extra_applications: [:logger],
   mod: {MyOtherApp.Application, []}]
end

Теперь мои вопросы:

  • Почему, когда я запускаю mix app.start, приложение сразу запускается и останавливается?
  • Когда мне запустить mix app.start вместо mix run?
  • Я знаю, что могу сделать mix run --no-halt, чтобы приложение продолжало работать вечно, но зачем? Почему, если я удалю супервизор и поставлю вызов loop/0 внизу моего my_other_app.ex, он будет продолжать работать вечно с mix run, а с супервизором - нет?

Спасибо за помощь!


person Thiago Felippe    schedule 07.03.2017    source источник
comment
Обычно mix run используется для запуска файла (*.exs). Перед выполнением любой команды задача компилирует и запускает текущее приложение. Имейте в виду, что запуск приложения также запускает его приложения. mix app.start запускает все зарегистрированные приложения. Я думаю, это означает, что он запускает все приложения, кроме основного приложения.   -  person Joe Eifert    schedule 08.03.2017


Ответы (1)


Проблема, по-видимому, связана с тем, как я вызывал функцию loop/0 в процессе задачи, который не находился под наблюдением.

Довольно просто, но процесс написания этого помог мне добраться туда;)

Спасибо за резиновый уклон, ТАК ;)

РЕДАКТИРОВАТЬ: я все равно отмечу правильный ответ тому, кто может объяснить мне, когда я запускал mix run против mix app.start

Спасибо

person Thiago Felippe    schedule 07.03.2017