2016-03-28 13 views
2

In Rake kann man Abhängigkeiten zwischen Aufgaben angeben. Die Engine erstellt dann einen Abhängigkeitenbaum und führt diese Aufgaben in der Reihenfolge der Abhängigkeiten und nur einmal für jede Aufgabe durch.Rake-ähnliche Abhängigkeitsfunktion in Elixir Mix-Aufgaben?

Gibt es einen ähnlichen Mechanismus in Elixier/Mix?

task seed_users: [:seed_companies] do 
    # actions 
end 

task :seed_companies do 
    # actions 
end 

Antwort

5

Ich glaube nicht, dass es jede eingebaute Funktionalität für diese, aber Sie können Mix.Task.run/2 dies zu erreichen, verwenden:

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 

Beispiel laufen:

$ mix seed_users 
started seed_users 
started seed_companies 
completed seed_companies 
completed seed_users 

Beachten Sie, dass Mix.Task.run/2 nicht Führen Sie die Aufgabe aus, wenn sie bereits einmal ausgeführt wurde. Wenn Sie also wie im obigen Beispiel zweimal Mix.Task.run/2 aufrufen, wird sie nur einmal ausgeführt. Wenn Sie eine Aufgabe mehr als einmal ausführen möchten, müssen Sie nach jedem Lauf Mix.Task.reenable/1 aufrufen.

+0

Ich denke, Sie vermissen 'verwenden Mix.Task' in jedem Modul – AbM