如何知道delayed_job何时完成了它的工作?

时间:2011-08-15 10:07:42

标签: ruby-on-rails screen-scraping delayed-job

我目前在我的模型中有一个方法来刮取网站并将记录插入数据库。

def self.scrape
  #scrape
  #insert into database
end

我设置了一个控制器方法来调用它:

def scrape
  Website.send_later(:scrape)
end

抓取工作正在运行,并通过控制台运行测试。但是,通过调用控制器方法激活它来运行它不起作用。

我已经尝试rake jobs:work它说了以下内容:

[Worker(host:thorpe-desktop pid:6962)] Starting job worker
[Worker(host:thorpe-desktop pid:6962)] Class#scrape completed after 0.5068
[Worker(host:thorpe-desktop pid:6962)] 1 jobs processed at 0.5898 j/s, 0 failed ...

我没有在数据库表中看到应该插入数据的任何内容。

2 个答案:

答案 0 :(得分:2)

作为判断作业是否已运行并完成的方法,您可以使用delayed_job提供的钩子将小记录写入job_status模型。在这种情况下有一些可能有用的钩子,最有趣的是:

def after(job)
  record_stat 'newsletter_job/after'
end

有类似的成功和完成,你可以使用类似的。我意识到这可能比你想要的更重,但它会做你想要的,可能是值得的。 delayed_job表似乎没有足够的信息来保存你想要的信息。

答案 1 :(得分:1)

此问题polling with delayed_job很好地描述了如何跟踪延迟作业何时完成。