Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 如何处理?错误:进程。在服务器关闭时在()之后发送\u_Elixir_Phoenix Framework - Fatal编程技术网

Elixir 如何处理?错误:进程。在服务器关闭时在()之后发送\u

Elixir 如何处理?错误:进程。在服务器关闭时在()之后发送\u,elixir,phoenix-framework,Elixir,Phoenix Framework,我有一个GenServer,每当我在数据库中创建一个特定对象时,它都会启动 发电机服务器: 基本上,我正在安排一个函数在将来运行。这个函数可以在未来运行1小时或12小时,但我意识到,如果服务器出于任何原因关闭,那么这个函数的计时现在可能会关闭,从而破坏整个进程 我如何用长生不老药处理这样的错误?即使服务器关闭,GenServer是否仍保持计时器运行?将下一次计划运行的时间保留在某个地方(例如在DETS,)并检查init回调中的存储。我喜欢包装,很有趣。因此,当服务器备份时,init回调将再次被

我有一个GenServer,每当我在数据库中创建一个特定对象时,它都会启动

发电机服务器:
基本上,我正在安排一个函数在将来运行。这个函数可以在未来运行1小时或12小时,但我意识到,如果服务器出于任何原因关闭,那么这个函数的计时现在可能会关闭,从而破坏整个进程


我如何用长生不老药处理这样的错误?即使服务器关闭,GenServer是否仍保持计时器运行?

将下一次计划运行的
时间
保留在某个地方(例如在
DETS
,)并检查
init
回调中的存储。我喜欢包装,很有趣。因此,当服务器备份时,init回调将再次被调用?我意识到整个用例对GenServer来说真的没有意义,我最终将其移动到了Exq。主要是因为它处理了Redis导致的服务器崩溃。我怀疑我是否理解Redis为什么比DETS更好,但还好。
defmodule Statcasters.Jobs.DisableQuestionPrediction do
  use GenServer

  def start_link do
    GenServer.start_link(__MODULE__, %{})
  end

  def init(question) do
    schedule_work(question)

    {:ok, question}
  end

  def handle_info(:work, question) do
    {:ok, question} = question

    Statcasters.Scheduler.disable_question_prediction(question)
    {:noreply, question}
  end

  defp schedule_work(question) do
    {:ok, question} = question
    schedule = Timex.diff(DateTime.utc_now, question.game_time, :milliseconds)

    Process.send_after(self(), :work, schedule)
  end
end