簡體   English   中英

簡單的Elixir / Mix項目的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM