2017-11-18 3 views
0

Ich versuche, das nächste Mal anzuzeigen, dass eine E-Mail geplant ist, indem Sie eines oder alle der folgenden Argumente als Eingaben verwenden. Ich verwende resque, resque-scheduler und resque-mailer.Wie programmiere ich programmatisch den Zeitplan eines verzögerten Mailer-Jobs mit Resque Mailer und Resque Scheduler?

resque-web display

Zum Beispiel sind über die verzögerten Arbeitsplätze wie in dem resque Web-Interface angezeigt. Also würde ich gerne "game_starting_reminder" und/oder 226 und/oder "Beat Box" eingeben und in der Lage sein, den Zeitstempel als solchen anzuzeigen:

"Nächste geplante E-Mail: 2017-10-31 um 9:30 Uhr ".

aber wenn ich versuche, für die in der Konsole zu nennen, ist das unter dem Ausgang I erhalten

Ich habe versucht, die delay_extensions und Methoden erstreckt und mit der find_delayed_selection Methode, aber das scheint nicht zu Arbeit. dieser Zum Beispiel:

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

Oder diese:

[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\"}"] 

Jede andere Methode kann ich hier verwenden? Oder Tipps. Vielen Dank!

Antwort

0

Ich habe es herausgefunden. Die Methode "Scheduled_at" ist hier der beste Kandidat für den Job.

Als ersten Schritt fügen Sie dem Projekt das Modul DelayingExtensions hinzu. Habe ich nur noch die Datei aus dem resque source code auf Github zu initializers und dann in resque.rb hinzugefügt, um die Zeile:

#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 

ich die scheduled_at Methode aus dem Github Quellcode leicht modifizierte, weil ich es nicht bekommen konnte zu arbeiten wie und den Namen der Methode geändert

#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 

in diesem Fall scheduled_for_time, können wir folgendes in der Konsole folgendes ein:

[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 

Voilà!