[英]Issue with simple elixir/mix project
我正在學習Elixir,並嘗試編寫一個簡單的Elixir你好世界示例,但是當我執行“ mix run”時,我一直遇到此錯誤
(Mix) Could not start application collector:
Collector.start(:normal, []) returned an error:
shutdown: failed to start child: Collector.Sample
(EXIT) nil
我究竟做錯了什么? 這是我的代碼減去mix.exs和其他非關鍵文件
defmodule Collector do
use Application
def start(_type, _args) do
Collector.Supervisor.start_link
end
end
defmodule Collector.Supervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, :ok)
end
def init(:ok) do
children = [
supervisor(Collector.Sample, [])
]
supervise(children, strategy: :one_for_one)
end
end
defmodule Collector.Sample do
use Application
def start_link do
end
def run do
IO.puts "Hello World"
end
end
我只想在控制台中運行“ mix run”時轉儲“ Hello World”,但不知道如何或在何處調用run()
方法。 謝謝
如果您想構建命令行應用程序,則此博客文章可能會為您提供幫助。
除此之外,主管通常不習慣於運行一次性流程,而是用來啟動諸如GenServers之類的工作程序,以后可以調用這些工作程序。 例如,您可以:
defmodule Collector.Supervisor do
# ...
def init(:ok) do
children = [
worker(Collector.Sample, [])
]
supervise(children, strategy: :one_for_one)
end
end
然后將Collector.Sample
實現為GenServer
:
defmodule Collector.Sample do
use GenServer
# Client API
def start_link do
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
def run do
GenServer.call __MODULE__, :run
end
# GenServer callbacks
def handle_call(:run, _from, state) do
IO.puts "Hello World"
{:reply, :ok, state}
end
end
您可以使用-e
標志直接從mix run
調用run方法
mix run -e 'Collector.Sample.run'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.