使 rufus 调度程序作业在服务器重新启动后仍然存在



>应用程序

我正在编写一个应用程序,该应用程序运行调度程序并在有人将条目保存到数据库中后获取记录。

初始值设定项/调度程序.rb

require 'rufus-scheduler' 

SCHEDULER = Rufus::Scheduler.new(:lockfile => ".rufus-scheduler.lock")
unless SCHEDULER.down?
  # SCHEDULER.every '3m', :tags => 121 do
  #   Rails.logger.info "Ping!!"
  #     Rails.logger.flush
  # end
end

控制器/abc_controller.rb

class AbcController < ApplicationController
  def new
    obj = ModelClass.new(params)
    if obj.save
      SCHEDULER.every obj.frequency do
        # run a job
      end
    end
  end
end

问题

作业从控制器启动,但问题是当服务器重新启动时,作业丢失。

我已经阅读了 rufus-scheduler 的自述文件,并提到它是一个非功能。但我仍然想知道是否有任何解决方案(在服务器重新启动后保留作业(还是我必须改变我的方法?

附言我在堆栈溢出上搜索了它,但如果我错过了任何东西或错过了类似的问题,我很抱歉。

编辑

对于所有想要使用 params 从控制器本身运行调度程序的人,如果可能的话,请考虑将数据保存在 db(temp 表或其他东西(中的策略,然后将 create 事件与调度绑定。在调度程序初始化时重新调度作业,即服务器重新启动,如@jmettraux回答中所述。希望这有帮助。

你是对的,rufus-scheduler与任何持久性无关。

既然您已经将记录绑定到计划(通过为每个要创建的对象计划作业(,为什么不在应用程序重新启动时简单地重新计划呢?

类似的东西(伪代码与你的对齐(:

require 'rufus-scheduler'

SCHEDULER = Rufus::Scheduler.new(:lockfile => ".rufus-scheduler.lock")
unless SCHEDULER.down?
  ModelClass.all.each do |obj|
    SCHEDULER.every obj.frequency do
      # the job
    end
  end
end

最新更新