mix runführt Ihre App aus. Es ist nur so, dass wenn Sie einfach IO.puts "something"eine Datei einfügen, diese Zeile nur zur Kompilierungszeit ausgewertet wird, sie zur Laufzeit nichts tut. Wenn Sie möchten, dass beim Starten Ihrer App etwas gestartet wird, müssen Sie dies in Ihrem Programm angeben mix.exs.
Normalerweise möchten Sie eine Top-Ebene Application, die gestartet wird. Fügen Sie dazu eine modOption hinzu mix.exs:
def application do
[
mod: {NewMix, []},
applications: [:logger]
]
end
Und dann müssen Sie in diesem Modul einen Rückruf implementieren, der beim Start der Anwendung aufgerufen wird:
defmodule NewMix do
use Application
def start(_type, _args) do
IO.puts "starting"
end
end
Der startRückruf sollte tatsächlich Ihren Prozess- oder Überwachungsbaumstamm der obersten Ebene einrichten. In diesem Fall sehen Sie jedoch bereits, dass er bei jeder Verwendung aufgerufen wird mix run, obwohl ein Fehler folgt.
def start(_type, _args) do
IO.puts "starting"
Task.start(fn -> :timer.sleep(1000); IO.puts("done sleeping") end)
end
In diesem Fall starten wir einen einfachen Prozess in unserem Rückruf, der nur eine Sekunde lang schläft und dann etwas ausgibt - dies reicht aus, um die API des startRückrufs zu erfüllen, aber wir sehen es nicht "done sleeping". Der Grund dafür ist, dass standardmäßig beendet mix runwird, sobald der Rückruf ausgeführt wurde. Damit dies nicht passiert, müssen Sie verwenden mix run --no-halt- in diesem Fall wird die VM nicht gestoppt.
Ein weiterer nützlicher Weg, um Ihre Anwendung zu starten, ist iex -S mix- dies verhält sich ähnlich wie mix run --no-halteine iexShell, öffnet aber auch eine Shell, in der Sie mit Ihrem Code und Ihrer laufenden Anwendung interagieren können.
.exsDatei) ausführen möchten, dies jedoch im Kontext Ihrer Mix-App tun, können Sie es ausführenmix run <script>. Siehemix help runfür weitere Informationen.