2012-04-27 313 views
2

我想刮一些網站&我希望這應該由單獨的工作進程完成。我開始瞭解延遲工作在後臺工作。我在我的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 

現在之後,我用下面的命令來啓動工作

腳本/ delayed_job的開始

耙作業:工作

我的工作人員對我的終端,我可以在開始&見

[工人(主持人:user1234桌面PID:9487)]啓動在職職工

現在我的問題是,當我調用執行方法直接,它工作正常。我的意思是下面的代碼工程完美地刮擦了網站並填充了數據庫。

紅寶石1.9.2-P0> Dj_testing.new.perform

但是,當我耽誤同樣的工作它增加了作業的delayed_job表&無助:(

紅寶石-1.9.2-P0> Dj_testing.delay.new

紅寶石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

你能嘗試重命名文件,以匹配類名稱?具有類Dj_testing的dj.rb有時會導致不一致。嘗試命名類DjTesting並調用文件dj_testing.rb。 – Anand 2012-04-27 06:40:54

+0

是的,這是原因..文件名和類名應該是相同的.. – 2012-05-02 04:35:36

回答

0

您需要在調用方法的對象上調用'delay'。所以,你的情況,應該是:

Dj_testing.new.delay.perform 

,而不是

Dj_testing.delay.new 
0

@調用該方法的塞利勒的方式是正確的,但是你可以從其他問題的痛苦。

按照我的回答準則,以這篇文章(我沒有在這裏發佈,因爲有許多:-)) https://stackoverflow.com/a/15000180/226255

我希望這有助於