2017-11-18 3 views
0

私は、次の引数のいずれかまたはすべてを入力として使用して電子メールがスケジュールされた次回の時刻を表示しようとしています。私はresque、resque-schedulerとresque-mailerを使っています。例えばResque MailerとResqueスケジューラを使用して遅延メーラージョブのスケジュールをプログラムで調べるにはどうすればよいですか?

resque-web display

resqueウェブインターフェースに表示されているように、上記遅延ジョブです。だから私は "game_starting_reminder"や226や "Beat Box"を入力して、タイムスタンプを次のように表示したいと考えています:

"次の予定のメールアドレス:2017-10-31 at 9:30午後しかし

、私はコンソールでの情報のために呼び出そうと、下記の私はdelay_extensionsとメソッドを拡張し、find_delayed_selectionメソッドを使用してみましたが、それはしていないようです

を受け取る出力されます作業。

[18] pry(main)> Resque.find_delayed_selection { |job| job["class"] == QuizMailer} 
TypeError: no implicit conversion of String into Integer 

またはこの:たとえばこのため

[32] pry(main)> Resque.find_delayed_selection { { 
[32] pry(main)*  "class": "QuizMailer",    
[32] pry(main)*  "args": ["game_starting_reminder", [226, "Beat Box"]],    
[32] pry(main)*  "queue": "mailer"    
[32] pry(main)* }}    
=> ["{\"class\":\"QuizMailer\",\"args\":[\"game_starting_reminder\",[226,\"Beat Box\"]],\"queue\":\"mailer\"}", 
"{\"class\":\"QuizMailer\",\"args\":[\"game_ending_reminder\",[226,\"Beat Box\"]],\"queue\":\"mailer\"}"] 

他の方法私はここで使用できますか?またはヒント。 ありがとうございました!

答えて

0

scheduled_atメソッドは、ジョブのための最良の候補です。

最初の手順では、DelayingExtensionsモジュールをプロジェクトに追加します。私はそれが仕事を得ることができなかったので、私は少しgithubのソースコードからscheduled_at方法を変更

#resque.rb 
rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/../..' 
rails_env = ENV['RAILS_ENV'] || 'development' 

resque_config = YAML.load_file(rails_root + '/config/resque.yml') 
Resque.redis = resque_config[rails_env] 
include DelayingExtensions 

:私はちょうど初期化子へのGithub上resque source codeからファイルを追加して、resque.rbにラインを追加しましたであり、この場合、

#delaying_extensions.rb 
    def scheduled_for_time(klass, *args) 
    args = args[0] 
    search = encode(job_to_hash(klass, args)) 
    redis.smembers("timestamps:#{search}").map do |key| 
     key.tr('delayed:', '').to_i 
    end 
    end 

をscheduled_for_timeするメソッドの名前を変更して、私たちは、コンソールで次の操作を実行できます。

[2] pry(main)> klass =QuizMailer 
    => QuizMailer 
    [4] pry(main)> args = ["game_starting_reminder", [230, "Beat Box"]] 
    => ["game_starting_reminder", [230, "Beat Box"]] 
    [5] pry(main)> Resque.scheduled_for_time(QuizMailer, args) 
    => [1515081600] 
    [6] pry(main)> Time.at(_.first) 
    => 2018-01-04 21:30:00 +0530 

Voila!

関連する問題