像Elixir Mix任务中的依赖功能一样耙?

时间:2016-03-28 05:23:06

标签: rake elixir mix

在Rake中,可以指定任务之间的依赖关系。然后,引擎构建依赖关系树,并按依赖关系的顺序执行这些任务,并且每个任务只执行一次。

在elixir / mix中是否存在类似的机制?

task seed_users: [:seed_companies] do 
  # actions
end

task :seed_companies do
  # actions
end

1 个答案:

答案 0 :(得分:5)

我认为没有任何内置功能,但你可以使用Mix.Task.run/2来实现这一目标:

defmodule Mix.Tasks.SeedUsers do
  def run(_args) do
    IO.puts "started seed_users"
    Mix.Task.run "seed_companies"
    Mix.Task.run "seed_companies"
    IO.puts "completed seed_users"
  end
end

defmodule Mix.Tasks.SeedCompanies do
  def run(_args) do
    IO.puts "started seed_companies"
    IO.puts "completed seed_companies"
  end
end

示例运行:

$ mix seed_users
started seed_users
started seed_companies
completed seed_companies
completed seed_users

请注意Mix.Task.run/2如果已经运行过一次就不会运行任务,因此如果您拨打Mix.Task.run/2两次,如上例所示,它只会运行一次。如果您想多次运行任务,则需要在每次运行后拨打Mix.Task.reenable/1