2017-11-18 104 views
0

我試圖顯示下一次使用任何或所有下面的參數作爲輸入安排電子郵件。我使用的是resque,resque-scheduler和resque-mailer。如何使用Resque Mailer和Resque調度程序以編程方式查找延遲郵件作業的日程安排?

resque-web display

例如,以上如顯示在resque web界面的延遲作業。所以我想輸入「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模塊添加到項目中。我只是說從resque source code文件在Github上,以初始化,然後在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 

Voila!

相關問題