延迟工作不起作用

时间:2012-04-27 05:56:18

标签: ruby-on-rails-3 activerecord delayed-job web-worker

我想抓一些网站&我希望这应该由单独的工作进程完成。我开始知道延迟工作在后台做工作。我在我的rails应用程序中使用collectiveidea / delayed_job。我按照rails 3.0&的安装步骤进行操作。积极的记录。

之后我在lib文件中创建了一个dj.rb&编写如下代码。

require 'nokogiri'
require 'open-uri'
class Dj_testing
  def perform
    #code for scraping the site
    #code to add entry into database 
  end
end

之后我使用以下命令启动worker

  

script / delayed_job start

     

佣金工作:工作

我的工人开始&在我的终端上,我可以看到

  

[Worker(host:user1234-desktop pid:9487)]启动求职者

现在我的问题是当我直接调用perform方法时工作正常。我的意思是下面的代码工作完全刮擦网站并填充数据库。

  

ruby​​-1.9.2-p0> Dj_testing.new.perform

但是,当我延迟同样的工作时,它会将工作添加到delayed_job表&什么都不做:(

  

ruby​​-1.9.2-p0> Dj_testing.delay.new

  

ruby​​-1.9.2-p0>延迟:: Job.enqueue Dj_testing.new

 #<Delayed::Backend::ActiveRecord::Job id: 150, priority: 0, attempts: 0, handler: 
"---!ruby/object:Delayed::PerformableMethod \nargs: ...", last_error: nil,
run_at: "2012-04-27 05:25:29", locked_at: nil, failed_at: nil, locked_by: nil,
queue: nil,created_at:     "2012-04-27 05:25:29", updated_at: "2012-04-27 05:25:29"> 

为什么工作没有按预期工作?

2 个答案:

答案 0 :(得分:0)

您需要在调用方法的对象上调用'delay'。所以,在你的情况下,它应该是:

Dj_testing.new.delay.perform

而不是

Dj_testing.delay.new

答案 1 :(得分:0)

@ salil调用方法的方法是正确的,但是你可能会遇到其他问题。

按照我对这篇文章的回答中的指导原则(我没有在这里发帖,因为有很多:-)) https://stackoverflow.com/a/15000180/226255

我希望这会有所帮助