我一直试图弄清楚这个问题,但无法弄清楚。
我在我的 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
这是我的工作(在模型/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