2011-08-15 9 views
4

현재 내 모델에서 사이트를 긁어 내고 레코드를 데이터베이스에 삽입하는 메소드가 있습니다.delayed_job이 작업을 마친 때를 어떻게 알 수 있습니까?

def self.scrape 
    #scrape 
    #insert into database 
end 

나는 그것을 호출 할 수있는 제어 방법 설정 :

def scrape 
    Website.send_later(:scrape) 
end 

스크래핑가 작동을하고 콘솔을 통해 그것을 실행하여 테스트했습니다. 그러나 컨트롤러 메소드를 호출하여 활성화하면 작동하지 않습니다. 나는 그것이 삽입 된 데이터가 있어야 데이터베이스 테이블에 아무것도 표시되지 않는

[Worker(host:thorpe-desktop pid:6962)] Starting job worker 
[Worker(host:thorpe-desktop pid:6962)] Class#scrape completed after 0.5068 
[Worker(host:thorpe-desktop pid:6962)] 1 jobs processed at 0.5898 j/s, 0 failed ... 

: 나는 rake jobs:work을 시도했습니다

는 다음과 같은 말한다.

답변

2

작업이 실행되고 완료되었는지 확인하는 방법으로 delayed_job에서 제공하는 후크를 사용하여 job_status 모델에 작은 레코드를 쓸 수 있습니다. 이 경우 유용 할 수있는 몇 가지 고리가 있으며 가장 흥미로운 부분은 다음과 같습니다.

def after(job) 
    record_stat 'newsletter_job/after' 
end 

비슷하게 사용할 수있는 성공과 마무리를위한 유사한 요소가 있습니다. 이것은 당신이 원하는 것보다 더 무거울 수도 있지만 그것이 당신이 원하는 것을 할 것이며 비용의 가치가있을 것입니다. delayed_job 테이블은 원하는 정보를 보유하지 않은 것 같습니다.

1

이 질문 polling with delayed_job에는 지연된 작업이 언제 완료되었는지를 추적하는 방법에 대한 설명이 나와 있습니다.

관련 문제