나는 (스택 오버 플로우에서 많이 게시했지만 여전히 문제를 해결하지 못했던) 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
주목할 점은 CountJob.new (@count)를 사용했지만 CountJob 클래스가 초기화 프로그램을 정의하지 않는다는 점입니다. 예외가 없습니까? delayed_job이 실행되기 전에 다른 회사가 생성되면 어떻게됩니까? 어쩌면 당신은 ID를 CountJob에 전달하고 그것을 create 메소드에 넣어야 만한다. – gmalette
나는 이것을 수행하는 많은 방법을 시도했지만 (값을 전달했는지 또는 연기했는지 또는 모델 또는 페이지 컨트롤러에서 지연된 작업인지 여부는 알 수 없음) 여전히 유용하지 않습니다. –
작업이 생성되고 last_error가 있으면 데이터베이스를 점검하십시오. – gmalette