mix run
uruchamia Twoją aplikację. Chodzi o to, że kiedy po prostu umieścisz IO.puts "something"
w pliku, który wiersz jest oceniany tylko w czasie kompilacji, nic nie robi w czasie wykonywania. Jeśli chcesz, aby coś zaczęło się po uruchomieniu aplikacji, musisz to określić w pliku mix.exs
.
Zwykle chcesz Application
zacząć od najwyższego poziomu . Aby to osiągnąć, dodaj mod
opcję do mix.exs
:
def application do
[
mod: {NewMix, []},
applications: [:logger]
]
end
A następnie w tym module musisz zaimplementować wywołanie zwrotne, które będzie wywoływane przy starcie aplikacji:
defmodule NewMix do
use Application
def start(_type, _args) do
IO.puts "starting"
end
end
start
Zwrotna powinna faktycznie konfiguracja procesu lub korzeń drzewa nadzór najwyższego poziomu, ale w tym przypadku będzie już widać, że jest ona wywoływana za każdym razem korzystać mix run
, choć następuje błąd.
def start(_type, _args) do
IO.puts "starting"
Task.start(fn -> :timer.sleep(1000); IO.puts("done sleeping") end)
end
W tym przypadku rozpoczynamy prosty proces w naszym wywołaniu zwrotnym, który po prostu śpi na jedną sekundę, a następnie wyświetla coś - to wystarczy, aby spełnić API start
wywołania zwrotnego, ale tego nie widzimy "done sleeping"
. Powodem tego jest to, że domyślnie mix run
zakończy działanie po zakończeniu wykonywania tego wywołania zwrotnego. Aby tak się nie stało, musisz użyć mix run --no-halt
- w tym przypadku maszyna wirtualna nie zostanie zatrzymana.
Innym użytecznym sposobem uruchamiania aplikacji jest iex -S mix
- będzie to zachowywało się w podobny sposób, mix run --no-halt
ale także otwiera iex
powłokę, w której można wchodzić w interakcje z kodem i uruchomioną aplikacją.
.exs
plik), ale zrób to w kontekście swojej aplikacji do miksowania, możesz uruchomićmix run <script>
. Zobacz,mix help run
aby uzyskać więcej informacji.