簡體   English   中英

如何使用Resque Mailer和Resque調度程序以編程方式查找延遲郵件程序作業的計划?

[英]How do I programmatically find out the schedule of a delayed mailer job with Resque Mailer and Resque scheduler?

我試圖在下次使用以下任何或所有參數作為輸入安排電子郵件時顯示。 我正在使用resque,resque-scheduler和resque-mailer。

resque-web顯示

例如,以上是resque Web界面中顯示的延遲作業。 所以我想輸入“game_starting_reminder”和/或226和/或“Beat Box”,然后能夠顯示時間戳:

“下一次預定電子郵件:2017-10-31 at 9:30 pm”。

但是,當我嘗試在控制台中調用信息時,下面是我收到的輸出

我已經嘗試擴展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\"}"]

我可以在這里使用的任何其他方法? 或提示。 謝謝!

弄清楚了。 scheduled_at方法是此作業的最佳候選者。

第一步是將DelayingExtensions模塊添加到項目中。 我剛剛將Github上的resque 源代碼中的文件添加到初始化程序中,然后在resque.rb中添加了以下行:

 #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源代碼中的scheduled_at方法,因為我無法使其按原樣工作,並將方法的名稱更改為scheduled_for_time

   #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

在這種情況下,我們可以在控制台中執行以下操作:

    [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

瞧!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM