resque调度程序作业的奇怪行为

所以有些背景,我在这里得到了一些建议:

在Ruby on Rails中调度事件

并且今天一直在努力实施它。 我似乎无法让它工作。 这是我的调度程序作业,用于在延迟队列和准备发送队列之间移动我的问题(我决定使用电子邮件而不是短信)

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来调用gather方法,然后执行操作实际上在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一起工作。 我假设如果队列是类似列表的对象,那么我可以操作它们,但它似乎是一个符号而不是像包含方法的东西? 我假设“添加内容的符号”也是无效的。 另外请告知是否这不是处理这种工作安排的方法

在将新方法gather添加到SchedulerJob模块后,您可能还没有重新启动Rails应用SchedulerJob 。 尝试重新启动您的应用以解决此问题。

您还可以将包含Resque worker的目录添加到Rails的watchable_dirs数组,以便您对正在开发的Resque工作模块所做的更改不需要重新启动您的应用程序。 有关详细信息,请参阅此博文:

http://wondible.com/2012/01/13/rails-3-2-autoloading-in-theory/