2

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

在 Ruby on Rails 中安排事件

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 之类的方法。我假设用于向其中添加内容的 << 表示法也是无效的。另外请告知这是否不是处理这种工作调度的方法

4

1 回答 1

0

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

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

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

于 2013-04-07T00:26:01.030 回答