Ruby の Rufus-scheduler を使用して、単純なコントローラーのアクションからジョブをスケジュールします。後で、その時点まで実行されていたジョブのスケジュールを解除する別のアクションを呼び出したいと思います。もちろん、スケジューラーの開始と停止の間に発生する可能性のある多くのセッションの間、スケジューラーへの参照を有効にしておく必要があります。明らかな選択は、スケジューラへの参照を保持するある種のシングルトン クラスです。
それはOKなアプローチですか?
はいの場合、これが私がそれを処理した方法です...
'controllers'、'models'、'views' などのフォルダの横に... クラス Rufus::Scheduler のプロパティを持つ AppConfig シングルトン クラスを作成したフォルダ 'domain' を作成しました。
私のシングルトンクラスは次のようになります。
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
ここで何か不足していますか?これはOKなアプローチですか?