编写DelayedJob自定义作业以运行脚本然后销毁对象

时间:2013-05-15 02:23:19

标签: ruby-on-rails ruby-on-rails-3 delayed-job background-process

我一直在努力解决这个问题很长一段时间,并且无法理解。

我在我的Rails应用程序中使用DelayedJob,以便运行脚本以通过Mechanize脚本填写网站上的某些表单。但是,在作业完成后,我不希望任何条目记录存储在我的应用程序的任何数据库中,因为没有理由再次访问它。

当我在控制器的create方法中将其作为简单的背景方法运行时,即在@course.delay.scrape之后立即调用if @course.save,这个过程非常有效。但是现在我想在后台工作完成后立即销毁对象,我相信我需要创建一个自定义工作,并且正在努力解决这个问题。

我知道DelayedJob文档列出了方法def after(job)。为了使用该方法,我需要创建一个自定义作业。我对如何创建自定义作业感到困惑,因为几乎我能找到的每个例子都是发送大量电子邮件,而这是出于不同的目的。我不知道如何让脚本以这种方式运行。

如果您可以帮我修改此代码,那将非常感谢!我尝试了很多变化,尽可能多地看一些例子。我知道它至少有一些错误,但还不够先进,不知道要改变什么。这是我在放弃之前尝试的最后一件事。

这是我的模型(在models / course.rb中):

class Course < ActiveRecord::Base

 after_create :send_to_delayed_job

 def scrape
   ...Mechanize script goes here ....
 end

 def send_to_delayed_job
  Delayed::Job.enqueue CourseJob.new(self.id), :queue => 'mycoursequeue'
 end
end

这是我的工作(在models / course_job.rb中):

class CourseJob < Struct.new(:course_id)

 def perform
  course = Course.find(self.id)
  course.scrape
 end

 def after(job)
  Course.destroy(params[:id])
 end
end

1 个答案:

答案 0 :(得分:1)

我们可以将course.destroy作为CourseJob#perform方法的最后一行吗?