2017-12-05 8 views
0

私はrails g job cleanUpで作成したジョブを持っています。Railsコントロールジョブ実行

ジョブが実行されているかどうかを確認するオプションはありますか。このようなものCleanUpJob.isRunning?

追加の宝石なしで作るのが一番簡単なのはどこですか? delayed_job?

ジョブを制御するための2番目のことは、進捗です、どのようにCleanUpJob.progressまたはprogress_jobを実装するのが私の選択ですか?

簡単に:

私は2つの方法(isRunning ?,進行)でジョブを作成する必要があります。 可能であれば、私は本当に追加のテーブルを望んでいません。

答えて

0

この目的でClass: Sidekiq::ScheduledSetを使用できます。

ドキュメントhere このクラスは、Sidekiq Webインターフェイスで使用されます。

例: 設定されたジョブを保存するときにジョブID(jid)を保存します。その後、照会インスタンス

def is_running? 
    require 'sidekiq/api' 
    ss = Sidekiq::ScheduledSet.new 
    jobs = ss.select {|ret| ret.jid == self.jid} 
    jobs.any? 
end 

のためにそれを呼び出すことができますまたは、あなたはaround_performフックで仕事の内側DBフラグを設定することができます。

class SomeJob < ActiveJob::Base 
     queue_as :some_job 

     around_perform do |job, block| 
     start_import_process_log job.arguments[0], job.arguments[1] || {} 
     block.call 
     finish_import_process_log 
     end 

# ... 
    private 

    def start_import_process_log import_process, options={} 
    #some actions 
    end 

    def finish_import_process_log 
    end 

end 

この例では、関連するログレコードが作成されます。 またはbefore_perform/after_performを使用できます。

私の練習では、長い作業でログ記録を消しています。

例としてジョブを見つけて殺す必要があるとき - 私はSidekiq::ScheduledSetを使用しています。

関連する問題