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