2

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なアプローチですか?

4

1 に答える 1