Эликсир: смешайте псевдонимы, две задачи `run` в одном псевдониме

При установке псевдонимов вроде:

defp aliases do
    [
      test_run: ["run -e 'IO.puts(\"One\")'", "run -e 'IO.puts(\"Two\")'"]
    ]
end

Результат mix test_run должен быть

$ mix test_run
One
Two

Но он выполняет только первую задачу и печатает

$ mix test_run
One

Не уверен, что это предполагаемое поведение, но прежде чем задавать вопрос, я хотел убедиться. Вот репозиторий для воспроизведения ошибки: https://github.com/wende/mix_run_twice


person Krzysztof Wende    schedule 25.04.2016    source источник
comment
Я также не уверен, что это задумано, но даже попытка run дважды в mix do не сработает: MIX_DEBUG=1 mix do run -e 'IO.puts("one")', run -e 'IO.puts("two")'   -  person tkowal    schedule 25.04.2016


Ответы (1)


Mix не позволяет запускать задачу дважды. Однако вы можете использовать Mix.Task.reenable / 1, чтобы запустить его снова.

  test_run: ["run -e 'IO.puts(\"One\"); Mix.Task.reenable(:run)'", "run -e 'IO.puts(\"Two\")'"]

Вы должны повторно активировать задачу в конце первой run, иначе она никогда не перейдет ко второй задаче. Вы не можете сделать что-то вроде:

 ["run -e 'IO.puts(\"One\")'", "run -e 'Mix.Task.reenable(:run)'"]

Я бы предложил создать пользовательскую задачу микширования, которая вызывает Mix.Task .run / 2 для каждой задачи, которую вы хотите запустить, повторно активируя по мере продвижения. Elixir 1.3 упростит это, предоставив rerun/2 функцию, которая выполняет reenable и run для задачи. https://github.com/elixir-lang/elixir/pull/4394

person Gazler    schedule 26.04.2016
comment
Вроде пока единственное решение. Но это больше похоже на способ обойти проблему - person Krzysztof Wende; 11.05.2016