在服务器重启后使 rufus-scheduler 作业持续存在
Making rufus-scheduler jobs persist after a server reboot
应用程序
我正在编写一个 运行 调度程序并在有人将条目保存到数据库后获取记录的应用程序。
initializers/scheduler.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
controllers/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 的自述文件,其中提到它不是一个功能。但我仍然想知道是否有任何解决方案(在服务器重启后保留作业)或者我是否必须改变我的方法?
P.S。我在堆栈溢出上搜索了它,但很抱歉,如果我遗漏了任何内容或遗漏了类似的问题。
编辑
对于所有想要使用参数从控制器本身 运行 调度程序的人来说,考虑一种策略,如果可能的话将数据保存在数据库中(临时 table 或其他),然后将创建事件与调度绑定。重新安排调度程序初始化的作业,即@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
应用程序
我正在编写一个 运行 调度程序并在有人将条目保存到数据库后获取记录的应用程序。
initializers/scheduler.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
controllers/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 的自述文件,其中提到它不是一个功能。但我仍然想知道是否有任何解决方案(在服务器重启后保留作业)或者我是否必须改变我的方法?
P.S。我在堆栈溢出上搜索了它,但很抱歉,如果我遗漏了任何内容或遗漏了类似的问题。
编辑
对于所有想要使用参数从控制器本身 运行 调度程序的人来说,考虑一种策略,如果可能的话将数据保存在数据库中(临时 table 或其他),然后将创建事件与调度绑定。重新安排调度程序初始化的作业,即@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