mix run
fü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 mod
Option 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 start
Rü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 start
Rückrufs zu erfüllen, aber wir sehen es nicht "done sleeping"
. Der Grund dafür ist, dass standardmäßig beendet mix run
wird, 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-halt
eine iex
Shell, öffnet aber auch eine Shell, in der Sie mit Ihrem Code und Ihrer laufenden Anwendung interagieren können.
.exs
Datei) ausführen möchten, dies jedoch im Kontext Ihrer Mix-App tun, können Sie es ausführenmix run <script>
. Siehemix help run
für weitere Informationen.