2013-04-07 50 views
2

这样一些背景奇怪的行为,我得到了一些意见在这里:与resque调度工作

Scheduling events in Ruby on Rails

A和已经被捆绑在今天实现它。我似乎不能让它工作。这是用来走动我的问题延迟队列和准备之间发送队列调度我的工作(因为我已经决定用电子邮件代替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一起工作。我认为,如果队列是类似列表的对象,那么我可以对它们进行操作,但它似乎是一个符号,而不是像methode那样的东西包含在内?我认为< <表示法增加的东西也是无效的。 也请告知,如果这是不是去处理这类作业调度

+0

你有没有加入'gather'方法'SchedulerJob'后重新启动您的应用程序? – 2013-04-07 00:14:11

+1

不错,所以改变了错误信息,但是现在我认为我遇到了对resque-scheduler工作原理的基本误解。更新问题主体以反映该问题 – bluedevil 2013-04-07 00:21:07

+0

我已经在下面发布了对原始问题的解答。如果您现在遇到新问题,最好打开一个关于当前问题的新问题(即,如何正确使用resque-scheduler) – 2013-04-07 00:27:55

回答

0

的看样子你可以添加新的方法gatherSchedulerJob模块后没有重新启动您的Rails应用程序的方式。尝试重新启动您的应用来解决这个问题。

您也可以将包含Resque worker的目录添加到Rails的watchable_dirs数组中,以便您在开发中对Resque工作模块所做的更改不需要重新启动应用程序。看到这个博客帖子的细节:

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