2013-04-07 1 views
2

поэтому некоторые контексте, я получил несколько советов здесь:Странное поведение с Resque планировщик заданий

Scheduling events in 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 для вызывать метод сбора каждый раз, когда создается присваивание, а затем выполнять действие фактически выполняет отправку писем при выполнении 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 

Любые идеи, что происходит? Я думаю, что это проблема с моим пониманием того, как работает эта очередь с реск-планировщиком. Я предположил, что если очереди были похожими на список объектами, то я мог бы работать на них, но кажется, что вместо символа, такого как include, есть символ? Я предполагаю, что нотация для добавления чего-либо к ней также недействительна. Кроме того, пожалуйста, сообщите, если это не так, как идти об обработке такого рода планирования заданий

+0

Вы перезапущен приложение после добавления 'метода gather' к' SchedulerJob'? –

+1

Приятно, так что изменилось сообщение об ошибке, но теперь я думаю, что у меня возникло фундаментальное непонимание того, как работает реск-планировщик. обновить орган вопроса, чтобы отразить это. – bluedevil

+0

Я отправил ответ на ваш первоначальный вопрос ниже. Если у вас новые проблемы сейчас, лучше всего открыть новый вопрос, посвященный вашей текущей проблеме (например, как правильно использовать планировщик resque) –

ответ

0

Похоже, вы, возможно, не перезапустить приложение Rails после добавления нового метода gather к SchedulerJob модуля. Попробуйте перезагрузить приложение, чтобы решить эту проблему.

Вы также можете добавить каталог, в котором находится ваш работник Resque, к массиву Rails 'watchable_dirs, чтобы изменения, внесенные вами в рабочие группы Resque для разработчиков, не требуют перезапуска вашего приложения. Смотрите этот блог для деталей:

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