2013-07-16 2 views
0

웹 응용 프로그램 마녀는 데이터베이스를 업데이트하기 위해 일부 직원을 필요로합니다. 이 작업자는 인터넷을 통해 일부 데이터를 가져오고 해당 항목을 업데이트 한 다음 업데이트되지 않은 항목을 제거합니다.모든 작업이 완료되면 resque에서 정리 작업을 호출하십시오.

스레드를 사용할 때 실행이 완료된 시점을 완벽하게 제어했기 때문에 문제가 없었습니다. 쓰레드가 크기 때문에 resque로 이동해야하지만 확장 성을 변경하는 것이 문제가되었으므로 모든 오래된 쓰레드는 이제 작업자가되었습니다.

잘 작동하지만 지금은이 문제가 있습니다. 작업자가 완료된 시간을 볼 수 없기 때문에 업데이트되지 않은 항목을 제거하기 위해 정리를 호출 할 수 없습니다.

Entry.update_all(updated: false) 
Docs.update_all(updated: false) 
Stuff.update_all(updated: false) 

# ... 
# My code that uses find_or_create_by_my_custom_id 
# Entry.find_or_create_by_tag(20) 
# ... 

Entry.delete_all(updated: false) 
Docs.delete_all(updated: false) 
Stuff.delete_all(updated: false) 

그리고 현재 resque에 난 내 시작 노동자 (전체 일을 시작하기 위해 호출 주 근로자)에이 설정을 가지고 :

내 예전의 코드는 다음과 같습니다

Resque.enqueue(UpdateEntriesJob, params) 
Resque.enqueue(UpdateDocsJob, params) 
Resque.enqueue(UpdateStuffJob, params) 

어떻게 이 작업이 완료된 시점을 제어 할 수 있습니까?

답변

0

방금이와 내 유일한 문제는 일부 노동자 3 4를 가지고있다

+0

after_performer 클래스 메서드

class UpdateEntriesJob ..... .... def self.perform ... ... ... end .... .... .... def self.after_perform ... [Write your code over] ... end end 

희망이 메이크업 센스를 추가하여 작업자 클래스의 after_perform 후크에게

을 확인 했 w1은 w2를, w2는 w3을, w3은 w4를 호출합니다. –

+0

@NicosKaralis는 목록에서 항상 마지막이라고 알고있는 작업자가 있습니다. 'after_perform'은 흥미로운 접근 방식을 사용할 수 있습니다. – Viren

관련 문제