mix runあなたのアプリを実行します。それはあなたが単に置くときだけということだIO.puts "something"行のみコンパイル時に評価されていることをファイルに、それは実行時に何もしません。アプリの起動時に何かを開始したい場合は、でそれを指定する必要がありますmix.exs。
通常、Application開始するトップレベルが必要です。これを実現するには、次のmodオプションを追加しますmix.exs。
def application do
[
mod: {NewMix, []},
applications: [:logger]
]
end
そして、そのモジュールで、アプリケーションの起動時に呼び出されるコールバックを実装する必要があります。
defmodule NewMix do
use Application
def start(_type, _args) do
IO.puts "starting"
end
end
startコールバックは、実際にセットアップあなたのトップレベルのプロセスや監督のツリーのルートべきであるが、この場合、あなたはすでにそれはあなたが使用するたびに呼び出されたことがわかりますmix runエラーが続くものの、。
def start(_type, _args) do
IO.puts "starting"
Task.start(fn -> :timer.sleep(1000); IO.puts("done sleeping") end)
end
この場合、コールバックで1秒間スリープしてから何かを出力する単純なプロセスを開始しています。これは、startコールバックのAPIを満たすのに十分ですが、表示されません"done sleeping"。これはmix run、コールバックの実行が終了すると、デフォルトで終了するためです。これが発生しないようにするには、を使用する必要mix run --no-haltがあります。この場合、VMは停止しません。
アプリケーションを起動するもう1つの便利な方法は、次のとおりです。iex -S mixこれは、コードや実行中のアプリケーションと対話できるシェルをmix run --no-halt開くのと同じようにiex動作します。
.exsファイル)を実行したいが、ミックスアプリのコンテキストで実行したい場合は、を実行できますmix run <script>。詳細についてはmix help run、を参照してください。