我想抓一些网站&我希望这应该由单独的工作进程完成。我开始知道延迟工作在后台做工作。我在我的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">
为什么工作没有按预期工作?
答案 0 :(得分:0)
您需要在调用方法的对象上调用'delay'。所以,在你的情况下,它应该是:
Dj_testing.new.delay.perform
而不是
Dj_testing.delay.new
答案 1 :(得分:0)
@ salil调用方法的方法是正确的,但是你可能会遇到其他问题。
按照我对这篇文章的回答中的指导原则(我没有在这里发帖,因为有很多:-)) https://stackoverflow.com/a/15000180/226255
我希望这会有所帮助