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
在这种情况下,我们在回调中开始一个简单的过程,它会睡眠一秒钟然后输出一些东西-这足以满足start回调的API的需要,但是我们没有看到"done sleeping"。其原因是,默认情况下mix run,该回调完成执行后将退出。为了避免这种情况发生,您需要使用mix run --no-halt-在这种情况下,VM不会停止。
启动应用程序的另一种有用方法是iex -S mix-行为类似于mix run --no-halt但又打开了一个iexShell,您可以在其中与代码和正在运行的应用程序进行交互。
.exs文件),但要在混合应用程序的上下文中运行,可以运行mix run <script>。请参阅mix help run以获取更多信息。