2017-11-18 9 views
0

다음 번 인수 중 일부 또는 전부를 입력으로 사용하여 전자 메일 예약을 한 다음에 표시하려고합니다. resque, resque-scheduler 및 resque-mailer를 사용하고 있습니다.Resque Mailer 및 Resque 스케줄러를 사용하여 지연된 메일러 작업의 일정을 프로그래밍 방식으로 어떻게 찾을 수 있습니까?

resque-web display

예를 들어, 위의 resque 웹 인터페이스에 표시된 지연 작업이다. 그래서 "game_starting_reminder"및/또는 226 및/또는 "박동 상자"를 입력하고 다음과 같이 타임 스탬프를 표시 할 수 있습니다.

"다음 예정된 이메일 : 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에서의 resque source code에서 파일을 추가 한 후 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 방법을 수정을 이며,이 경우

#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!