2016-06-16 7 views
1

제목은 모두 그것을 정말로 말합니다.수동으로 시계 작업을 실행할 수 있습니까?

시계 작업을 수동으로 실행할 수 있습니까? 예 : 나는 clock.rb 파일을

module Clockwork 
    every(15.minutes, 'api.sync_shifts') do 
    Shift.sync 
    end 

    on(:after_run) do |event, t| 
    REDIS.hset("clockwork:last_run", event.job, t) 
    end 
end 

이 있다면 나는 Clockwork.run('api.sync_shifts') 같은 것을 호출 할 수 싶습니다.

나는 시계 작업 소스를 살펴본 결과 유용하지 않은 것을 보았습니다. 분명히이 예제에서는 Shift.sync 메서드를 수동으로 실행할 수 있지만 작업 상태를 모니터링하는 데 사용하는 after_run/before_run 콜백을 잃어 버릴 수 있습니다.

+0

저는 Clockwork에 익숙하지 않지만, 추상화 수준을 추가하고 Clockwork 또는 메서드 호출을 원하는 다른 인터페이스를 통해 필요한 메서드를 만들어야합니다. 'Shift.sync'를'REDIS.hset'을 호출하는 메소드에 랩핑 할 수 있습니까? 아니면 Clockwork DSL의 명령 부분입니까? –

+0

아마도 시계 작업 파일에서 실행되는 별도의 스크립트로 이벤트를 추출하십시오. –

+0

나는 Clockwork 그 자체가 내 추상화 수준이 되길 바랬지 만 모든 레이어를 하나씩 감쌀 필요가있다. 팁 주셔서 감사. – chrismanderson

답변

1

아니요, 불가능합니다. . events_to_run 메서드에서 반환 현재 시간 (에서 실행해야합니다 모든 이벤트 그것은 온통 반복 할

def tick(t=Time.now) 
    if (fire_callbacks(:before_tick)) 
    events = events_to_run(t) 
    events.each do |event| 
     if (fire_callbacks(:before_run, event, t)) 
     event.run(t) 
     fire_callbacks(:after_run, event, t) 
     end 
    end 
    end 
    fire_callbacks(:after_tick) 
    events 
end 

이 방법로드 :

콜백 및 실행 구성 이벤트를 처리하는 시계 보석의 relevant method을 IT . events_to_run 이벤트 및 화재 콜백 및

개별 이벤트를 실행 할 수 있도록 event 실행하고 여전히 콜백 해고 한이 방법은 다음과 같이 뭔가를 changeto 할 필요가 :

,536,
def tick(t=Time.now) 
    if (fire_callbacks(:before_tick)) 
    events = events_to_run(t) 
    events.each do |event| 
     run_event_with_callbacks(event) 
    end 
    end 
    fire_callbacks(:after_tick) 
    events 
end 

def run_event_with_callbacks(event) 
    if (fire_callbacks(:before_run, event, t)) 
    event.run(t) 
     fire_callbacks(:after_run, event, t) 
    end 
    end 
end 

이렇게하면 개별 이벤트를 콜백 콜을 사용하여 실행할 수 있습니다. 또한 개별 이벤트를로드하는 메소드가 필요합니다. 이 같은 아마 뭔가 :

def load_event(job) 
    # finds only the first event when there are multiple 
    # events registered for the same job 
    @events.find { |event| event.job == job } 
end 

그러나 이벤트가 Manager에 등록되기 때문에, 올바르게 설정에 정의 된 모든 이벤트로 초기화되는 관리자의 인스턴스를 필요

.

짧게 이야기하기 : 현재로서는 불가능하며 코드 구조를 변경해야 많은 변경이 가능합니다.

+0

나는 더 나은 대답이 있었으면 좋겠지 만 이것은 답이다. 감사! – chrismanderson