我想抓取一些网站,我希望这应该由单独的工作进程完成。我开始了解延迟工作以在后台完成工作。我在我的 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(host:user1234-desktop pid:9487)] 启动工作工作者
现在我的问题是当我直接调用 perform 方法时它工作正常。我的意思是以下代码可以完美地抓取网站并填充数据库。
ruby-1.9.2-p0 > Dj_testing.new.perform
但是当我延迟同一份工作时,它会将工作添加到延迟工作表中并且什么都不做:(
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">
为什么工作没有按预期工作?