我从一个简单的控制器操作中使用 Ruby 中的 Rufus-scheduler 调度作业。稍后我想调用另一个操作,在其中我将取消计划直到那个时刻正在执行的作业。当然,在启动和停止调度程序之间可能发生的许多会话期间,我需要保持对我的调度程序的引用。一个明显的选择是某种单例类,它将保持对调度程序的引用。
这是一个好的方法吗?
如果是的话,这就是我的处理方式......
除了像“控制器”、“模型”、“视图”这样的文件夹......我创建了文件夹“域”,我在其中创建了具有 Rufus::Scheduler 类属性的 AppConfig 单例类。
我的单例类如下所示:
require 'singleton'
require 'rufus/scheduler'
class AppConfig
include Singleton
attr_accessor :scheduler
def self.instance
@@instance ||= new
end
def initialize
@scheduler = Rufus::Scheduler.start_new
end
end
我使用这个调度器的操作是这样的:
# ...
# someController
def start_actions
scheduler = AppConfig.instance.scheduler
scheduler.every('30s') do
SomeModel.some_method
end
end
def stop_actions
scheduler = AppConfig.instance.scheduler
scheduler.stop(:terminate => true)
end
我在这里错过了什么吗?这是一个好的方法吗?