gpt4 book ai didi

elixir - 如何运行 Elixir 应用程序?

转载 作者:行者123 更新时间:2023-12-03 05:15:45 25 4
gpt4 key购买 nike

运行 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,这是我的应用程序中依赖项所需要的。

最佳答案

mix run 确实运行您的应用程序。只是当您简单地将 IO.puts "something"放入文件中时,该行仅在编译时评估,它在运行时不执行任何操作。如果您希望在启动应用程序时开始执行某些操作,则需要在 mix.exs 中指定。

通常您需要一个能够启动的顶级应用程序。要实现这一点,请向您的 mix.exs 添加 mod 选项:

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,但我们看不到“ sleep 了”。原因是默认情况下,一旦回调完成执行,mix run就会退出。为了避免这种情况发生,您需要使用mix run --no-halt - 在这种情况下,虚拟机将不会停止。

启动应用程序的另一个有用方法是 iex -S mix - 这与 mix run --no-halt 的行为方式类似,但也会打开一个iex shell,您可以在其中与代码和正在运行的应用程序进行交互。

关于elixir - 如何运行 Elixir 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30687781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com