0

我一直想做Delayed :: Job來做fbLikes(我在StackOverFlow上發佈了很多內容,但仍然沒有解決問題)我的表格n數據庫有名稱,id,fbLikes,fbId,url。 這是我的程序步驟。 [首頁]公司信息 - >創建公司[插入公司信息] - >保存fbId,名稱,編號,網址但不是FBLIKES - >重定向到首頁[after_save更新之前添加的公司的fbLikes]DELAYED_JOB延遲作業中的Update_attribute無法正常工作,表未更新

我不知道我的延期工作是否正常工作,因爲我的模型中的fbLikes仍然是空白的,沒有更新最新的fbLikes。我不確定是否有更好的方法來做到這一點。 對於「耙工:工作」,控制檯中沒有後臺工作顯示。

[MODEL company.rb]

require "delayed_job" 
require "count_job.rb" 
after_save :fb_likes 
def fb_likes  
    Delayed::Job.enqueue(CountJob.new(self.id)) 
end 

[LIB/count_job.rb]

require 'net/http' 
require 'company.rb' 

class CountJob < Struct.new(:id)   
    def perform 
    @company = Company.find(id) 
    uri = URI("http://graph.facebook.com/#{@company.fbId}") 
    data = Net::HTTP.get(uri) 
    @company.fbLikes= JSON.parse(data)['likes'] 
    @company.save! 
    end 
end 
+0

我注意到的一點是你使用了CountJob.new(@count),但是你的CountJob類沒有定義任何初始化器。你沒有得到例外嗎?另外,如果在delayed_job運行之前創建了另一家公司,會發生什麼情況?也許你應該將ID傳遞給CountJob並將其排入create方法中。 – gmalette 2012-04-21 16:53:43

+0

我嘗試了很多方法來做到這一點(無論是否通過值或模型或頁面控制器中的延遲作業),但仍然無濟於事。 – 2012-04-22 00:32:16

+0

檢查數據庫是否創建了作業,是否有任何last_error。 – gmalette 2012-04-24 19:00:02

回答

0

[MODEL company.rb]

require "delayed_job" 
require "count_job.rb" 
after_save :fb_likes 
def fb_likes  
    Delayed::Job.enqueue(CountJob.new(self.id)) 
end 

[LIB/count_job.rb ]

require 'net/http' 
require 'company.rb' 

class CountJob < Struct.new(:id)   
    def perform 
    @company = Company.find(id) 
    uri = URI("http://graph.facebook.com/#{@company.fbId}") 
    data = Net::HTTP.get(uri) 
    @company.fbLikes= JSON.parse(data)['likes'] 
    @company.save! 
    end 
end