Функциональность Rake like dependency в задачах Elixir Mix?

В Rake можно указать зависимости между задачами. Затем движок строит дерево зависимостей и выполняет эти задачи в порядке зависимостей и только один раз для каждой задачи.

Есть ли аналогичный механизм для этого в elixir / mix?

task seed_users: [:seed_companies] do 
  # actions
end

task :seed_companies do
  # actions
end

person elpddev    schedule 28.03.2016    source источник


Ответы (1)


Я не думаю, что для этого есть какие-либо встроенные функции, но вы можете использовать _ 1_ для этого:

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 дважды, как в приведенном выше примере, она будет запущена только один раз. Если вы хотите запустить задачу более одного раза, вам нужно вызвать _ 6_ после каждого запуска.

person Dogbert    schedule 28.03.2016
comment
Я думаю, вам не хватает use Mix.Task в каждом модуле - person AbM; 28.03.2016