2

いくつかの文脈、私はここでいくつかのアドバイスを得ました:

Ruby on Rails でのイベントのスケジューリング

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

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 に答える