我试图在下次使用以下任何或所有参数作为输入安排电子邮件时显示。我使用resque,resque-scheduler和resque-mailer。
例如,上面是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\"}"]
我可以在这里使用其他任何方法吗?或提示。 谢谢!
答案 0 :(得分:2)
想出来。 scheduled_at方法是此作业的最佳候选者。
第一步是将DelayingExtensions模块添加到项目中。我刚刚将Github上的res 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方法,因为我无法按原样运行并将方法名称更改为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
瞧!