1

HTTP リクエストを 5 秒ごとにポストして、ハートビートをサーバーに報告するプロセスを生成しようとしています。私が持っているコードは次のとおりです。

defmodule MyModule.Heartbeat do
  def start_link do
    spawn_link(fn ->
      :timer.apply_interval(:timer.seconds(5), __MODULE__, :beat, [])
    end)
  end

  defp beat do
    HTTPoison.post "https://myserver/heartbeat
  end
end

defmodule MyModule.Supervisor do
  use Supervisor

  def start_link do
    Supervisor.start_link(__MODULE__, :ok)
  end

  def init(:ok) do
     children = [
       worker(MyModule.Heartbeat, [])
     ]

    supervise(children, strategy: :one_for_one)
  end
end

ただし、アプリを起動しようとすると、次のエラーで終了します。

[info] Application my_module exited: MyModule.start(:normal, []) returned an error: shutdown: failed to start child: MyModule.Heartbeat
    ** (EXIT) #PID<0.535.0>

必要なのは、監視ツリーの一部として実行され、指定された間隔で要求を送信するプロセスだけです。メッセージ自体を受信できる必要はありません。特定の実装についてはあまり気にしません。

このプロセスの開始を妨げているここで私が間違ったことを誰かが提案できますか?これを達成するためのより良い方法があるかもしれませんか?

4

1 に答える 1