いくつかの文脈、私はここでいくつかのアドバイスを得ました:
そして、今日それを実装しようとしています。私はそれを機能させるようには見えません。これは、遅延キューと送信準備完了キューの間で質問を移動するために使用される私のスケジューラ ジョブです (それ以来、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 を使用して、割り当てが作成されるたびに 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 でどのように機能するかについての私の理解に問題があると思います。キューがリストのようなオブジェクトであれば、それらを操作できると思いましたが、インクルードのようなメソッドを持つものではなく、シンボルのようです? 何かを追加する << 表記も無効だと思います。また、この種のジョブスケジューリングを処理する方法がこれではない場合は、アドバイスしてください