2017-11-21 6 views
0

コントローラを介してclock.rbファイルからジョブのリストを取得する必要があります。私は仕事を定義するためにRuby 2.3.3、レール4.2、時計の宝石を使用しています。ファイル私clock.rbでclock.rbファイルからバックグラウンドジョブのリストを取得

は私のコードは、私が仕事のリストを取得するにはどのように私のコントローラで

module Clockwork 
    handler do |job, time| 
    Rails.logger.warn "Running #{job}, at #{time}" 
    end 

    configure do |config| 
    config[:logger] = Rails.logger 
    end 

    def self.job1? 
    # ... 
    end 

    def self.job2? 
    # ... 
    end 
end 

、これを成し遂げるためにどのように任意のアイデアでしたか?

+1

あなたは正確に何かのリストを取得しようとしていますか? * clock.rbで定義されているすべてのジョブ? *現在スケジュールされているすべてのバックグラウンドタスク*(または実行中)? –

+0

フロントエンドに表示するジョブ名のリストを取得しようとしています。バックグラウンドジョブはclock.rbで定義され、バックグラウンドタスクはスケジュールされます。 UIから手動でジョブを実行する必要があります。 @TomLord – Narayanan

答えて

0

私が直接これを行うための方法を見つけるためにthe source codeに少し掘っていた:

再び
# This is the demo file from the gem's README: 

require 'clockwork' 
module Clockwork 
    handler do |job| 
    puts "Running #{job}" 
    end 

    every(10.seconds, 'frequent.job') 
    every(3.minutes, 'less.frequent.job') 
    every(1.hour, 'hourly.job') 

    every(1.day, 'midnight.job', :at => '00:00') 
end 

# Here is a way to then access the defined events: 

Clockwork.manager.instance_variable_get('@events').map(&:to_s) 
#=> ["frequent.job", "less.frequent.job", "hourly.job", "midnight.job"] 

を呼び出す際に、ソースコードを見て、このライブラリが動作する方法は、(例えば)ということですevery(period, job_name)、このregisters an eventClockwork.managerです。

ただし、警告:プライベートデータへのアクセス - つまりinstance_variable_get('@events') - は、内部実装のに依存します。この方法で使用するようには設計されていないため、将来のバージョンの宝石で実装が完全に変更される可能性があります。

「これをしないでください」と言うわけではなく、「を注意して実行してください。」としてください。また、この機能に大きく依存する予定の場合は、プロジェクトをフォークするか(またはPRを提出することも)、ライブラリの正式な機能にすることを検討してください。

+0

また、あなたの "バックグラウンドジョブのリスト" *は 'clock.rb'で定義されたジョブの*サブセット*だけかもしれません。したがって、これが本当にあなたが取るべき正しいアプローチであるかどうかを検討してください... –

関連する問題