2016-03-28 13 views
2

Rake'de görevler arasında bağımlılıklar belirtebilir. Motor daha sonra bir bağımlılık ağacı kurar ve bu görevleri bağımlılık sırasına göre ve sadece bir kez her görevde yerine getirir.Elixir Mix görevlerinde bağımlılık işlevi gibi mi oldunuz?

Eliksir/karışımda benzer bir mekanizma var mı?

task seed_users: [:seed_companies] do 
    # actions 
end 

task :seed_companies do 
    # actions 
end 

cevap

5

Bunun için herhangi bir dahili işlevselliği var sanmıyorum, ama bunu başarmak için Mix.Task.run/2 kullanabilirsiniz:

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 

Örnek çalıştırın: Mix.Task.run/2 değil

$ mix seed_users 
started seed_users 
started seed_companies 
completed seed_companies 
completed seed_users 

Not olduğunu Eğer bir kez çalıştırılmışsa, bu görevi çalıştırın, yani yukarıdaki örnekte olduğu gibi Mix.Task.run/2 iki kere çağırırsanız, sadece bir kez çalıştırılır. Bir görevi bir defadan fazla çalıştırmak isterseniz, her çalışmadan sonra Mix.Task.reenable/1 numaralı telefonu aramanız gerekir.

+0

Sanırım her modülde 'mix.Task' kullanamazsınız – AbM