0

나는 (스택 오버 플로우에서 많이 게시했지만 여전히 문제를 해결하지 못했던) fbLikes를 수행하는 Delayed :: Job을하고 싶었습니다. n 데이터베이스는 이름, ID, fbLikes, fbId, url을가집니다. 다음은 프로그램에 대한 나의 단계입니다. [회사 소개] 회사 소개 -> 회사 만들기 [회사 소개 삽입] -> fbId, 이름, 아이디, URL 저장 -> 홈페이지로 리디렉션 -> 이전에 추가 된 회사의 fbLikes 업데이트DELAYED_JOB 지연된 작업의 Update_attribute가 작동하지 않습니다. 테이블이 업데이트되지 않았습니다.

내 지연된 작업이 작동하는지 여부는 내 모델의 fbLikes가 여전히 비어 있고 최신 fbLikes로 업데이트되지 않았기 때문에 확실하지 않습니다. 더 좋은 방법은 없습니다. "rake jobs : work"의 경우 콘솔에 배경 작업 표시가 없습니다.

[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

+0

나는 이것을 수행하는 많은 방법을 시도했지만 (값을 전달했는지 또는 연기했는지 또는 모델 또는 페이지 컨트롤러에서 지연된 작업인지 여부는 알 수 없음) 여전히 유용하지 않습니다. –

+0

작업이 생성되고 last_error가 있으면 데이터베이스를 점검하십시오. – gmalette

답변

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 
관련 문제