所以一些背景,我在这里得到了一些建议:
aand 一直在努力实施它。我似乎无法让它工作。这是我的调度程序工作,用于在延迟队列和准备发送队列之间移动我的问题(我已经决定使用电子邮件而不是 SMS)
require 'Assignment'
require 'QuestionMailer'
module SchedulerJob
@delayed_queue = :delayed_queue
@ready_queue
def self.perform()
@delayed_queue.each do |a|
if(Time.now >= a.question.schedule)
@ready_queue << a
@delayed_queue.delete(a)
end
end
push_questions
end
def self.gather()
assignments = Assignment.find :all
assignments.each do |a|
@delayed_queue << a unless @delayed_queue.include? a
end
end
private
def self.push_questions
@ready_queue.each do |a|
QuestionMailer.question(a)
end
end
end
每次创建分配时,我都会使用回调 on_create 调用收集方法,然后执行操作实际上是在 resque 运行时发送电子邮件。
不过,我从回调中收到了一个奇怪的错误。
undefined method `include?' for :delayed_queue:Symbol
这是分配模型中的代码
class Assignment < ActiveRecord::Base
belongs_to :user
belongs_to :question
attr_accessible :title, :body, :user_id, :question_id , :response , :correct
after_create :queue_assignments
def grade
self.correct = (response == self.question.solution) unless response == nil
end
def queue_assignments
SchedulerJob.gather
end
有什么想法吗?我认为这是我对这些队列如何与 resque-scheduler 一起工作的理解的问题。我假设如果队列是类似列表的对象,那么我可以对它们进行操作,但它似乎是一个符号,而不是像 include 之类的方法。我假设用于向其中添加内容的 << 表示法也是无效的。另外请告知这是否不是处理这种工作调度的方法