2017-01-15 13 views

cevap

9

Kabuk, burada gereksiz bağlantıdır. Eğer edeliver görevi çalıştırmak istiyorsanız, Mix.Tasks.Edeliver#run çalıştırın: Eğer Loki kullanabilirsiniz

def run(_) do 
    Mix.Tasks.Edeliver.run(~w|build release|) 
    # do other stuff 
0

asla başka karışımı görev içinden Mix.shell.cmd aracılığıyla bir karışımı görev çalışan çalıştım ve en iyi yöntem olup olmadığından emin değilim olsa da, rahatsız çalışacak hedefliyor şeyin gibi bir şey gibi görünüyor:

def run(args) do 
    Mix.Shell.cmd("mix test", fn(output) -> IO.write(output) end) 
    # (...) 
end 

Yukarıdaki kod, testleri üzerinden çalıştırır ve çıktılarını yazdırır. Not: Yukarıdaki kod Mix 1.3.4 dayanmaktadır, arayüz 1.4.0 biraz farklıdır.

daha zarif bir yaklaşım olsa da, bir "karma" görev için bir mix alias oluşturarak size bağlıdır görevler oluşan olacağını ve özel biri olabilir ne

:

# inside mix.exs 
def project do 
    [ 
    # (...) 
    aliases: [ 
     "composite.task": [ 
     "test", 
     "edeliver build release", 
     "my.custom.task", 
     ] 
    ] 
    ] 
end 

Şimdi mix composite.task çalışan iki çalışmalıdır my.custom.task'dan önce diğer görevler.

1

kabuk COMAND yürütülmesi için. Kabuk yürütme execute/1 için işlevleri bulabilirsiniz. Diğer karışımı görevlerini yürütmek için Mix.Task kullanılan nasıl

Ve örnek:

defmodule Mix.Tasks.Sesamex.Gen.Auth do 
    use Mix.Task 

    import Loki.Cmd 
    import Loki.Shell 

    @spec run(List.t) :: none() 
    def run([singular, plural]) do 

    execute("mix sesamex.gen.model #{singular} #{plural}") 
    execute("mix sesamex.gen.controllers #{singular}") 
    execute("mix sesamex.gen.views #{singular}") 
    execute("mix sesamex.gen.templates #{singular}") 
    execute("mix sesamex.gen.routes #{singular}") 

    # ... 
    end 
end 

Ya da sadece o komutu çalıştırmak nasıl bak:

@spec execute(String.t, list(Keyword.t)) :: {Collectable.t, exit_status :: non_neg_integer} 
def execute(string, opts) when is_bitstring(string) and is_list(opts) do 
    [command | args] = String.split(string) 
    say IO.ANSI.format [:green, " * execute ", :reset, string] 
    System.cmd(command, args, env: opts) 
end 

sana yardımı Umut.