resque调度程序作业的奇怪行为
所以有些背景,我在这里得到了一些建议:
在Ruby on Rails中调度事件
并且今天一直在努力实施它。 我似乎无法让它工作。 这是我的调度程序作业,用于在延迟队列和准备发送队列之间移动我的问题(我决定使用电子邮件而不是短信)
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一起工作。 我假设如果队列是类似列表的对象,那么我可以操作它们,但它似乎是一个符号而不是像包含方法的东西? 我假设“添加内容的符号”也是无效的。 另外请告知是否这不是处理这种工作安排的方法
在将新方法gather
添加到SchedulerJob
模块后,您可能还没有重新启动Rails应用SchedulerJob
。 尝试重新启动您的应用以解决此问题。
您还可以将包含Resque worker的目录添加到Rails的watchable_dirs
数组,以便您对正在开发的Resque工作模块所做的更改不需要重新启动您的应用程序。 有关详细信息,请参阅此博文:
http://wondible.com/2012/01/13/rails-3-2-autoloading-in-theory/
- Rails,Heroku,Unicorn&Resque – 如何选择网络工作者/ resque工作者的数量?
- 在Heroku上一起使用Resque,Puma和Scheduler
- 如何在AWS Elastic Beanstalk上使用Resque运行Rails后台作业?
- 即使从生产模式下的服务器运行,Resque也会写入开发数据库
- 使用Heroku在RedisToGo上使用Resque,Resque Server
- 单工dyno的并行背景任务
- Rails – 后台作业中的ActionDispatch :: Http :: UploadedFile
- 在resque中使用prawn在后台生成pdf
- Heroku上的Postgres错误与Resque