运行Elixir应用程序的正确方法是什么?
我通过以下方式创建一个简单的项目:
mix new app
然后我可以做:
mix run
基本上可以一次编译我的应用 所以当我添加:
IO.puts "running"
在lib/app.ex
我"running"
第一次看到的情况下,run
除非有一些更改,否则每个连续项都不会执行任何操作。接下来,我该怎么办app.app
?
我当然知道我可以做到:
escript: [main_module: App]
在中mix.exs
,提供def main(args):
,然后:
mix escript.build
./app
但我认为这有点麻烦。
还有类似的东西:
elixir lib/app.exs
但这并不mix.exs
明显,这对于my中的依赖项是必需的app
。
mix run
确实运行您的应用程序。只是当您简单地将IO.puts "something"
文件放入文件中时,该行仅在编译时求值,而在运行时它什么也不做。如果您希望在启动应用程序时入门,则需要在中指定mix.exs
。
通常,您需要一个Application
入门的顶层。为此,请mod
向您添加一个选项mix.exs
:
def application do
[
# this is the name of any module implementing the Application behaviour
mod: {NewMix, []},
applications: [:logger]
]
end
然后在该模块中,您需要实现一个在应用程序启动时将被调用的回调:
defmodule NewMix do
use Application
def start(_type, _args) do
IO.puts "starting"
# some more stuff
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
但又打开了一个iex
Shell,您可以在其中与代码和正在运行的应用程序进行交互。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句