【问题标题】:Elixir: Mix aliases, two `run` tasks in one aliasElixir:混合别名,一个别名中的两个“运行”任务
【发布时间】:2016-08-19 04:00:17
【问题描述】:

当设置别名时:

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

【问题讨论】:

  • 我也不确定它是否有意,但即使在mix do 中尝试两次run 也不起作用:MIX_DEBUG=1 mix do run -e 'IO.puts("one")', run -e 'IO.puts("two")'

标签: elixir elixir-mix


【解决方案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 函数来简化此操作,该函数执行 reenablerun 的任务。 https://github.com/elixir-lang/elixir/pull/4394

【讨论】:

  • 这似乎是目前唯一的解决方案。但它看起来更像是解决问题的方法
猜你喜欢
  • 2018-08-18
  • 2013-04-23
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多