실제 대기열 서비스로 작업을 실행하는 일부 예약 된 작업이 있습니다.레일은 단일 작업을 위해 ActiveJob 어댑터를 변경합니다.
이제 대시 보드에서 수동으로 작업을 실행하고 실행을 기다리고 컨트롤러 작업에서 일부 출력을 읽고 처리 할 수 있기를 바랍니다. 일반적인 경우 관리자가 수동으로 일부 통계를 다시로드하려는 경우이며 몇 초 동안 서버를 정지시키는 것이 좋습니다.
이렇게하려면 ActiveJob 어댑터를 "인라인"으로 변경하는 방법이 있습니까? 가능한 경우이 작업에 의해 생성 된 일부 유물 (인스턴스 변수 또는 perform
작업의 반환 값일 수 있음)을 읽고 싶습니다.
그 방법은 무엇입니까?
샘플 작업 "perform_now"
내가 믿는class TopLevelJob < ApplicationJob
def perform
some_iterator.each do
SomeNestedJob.rand.perform_later
# There are several types of sub-jobs that can be called
# Passing a flag param (perform vs perform_later) would be kind of annoying
end
end
module SomeNestedJob
class A < ApplicationJob;
def perform
# May in turn spawn an other job with perform_later
end
end
...
class Z < ApplicationJob; ...; end
def self.rand
[A..Z].sample
end
end
문제는 내 작업이 여러 개의 중첩 된 작업을 트리거하고 모든 중첩 된 작업의 코드를 변경하여 해당 플래그를 전달하는 것입니다. 이상적으로 현재 요청에 대한 구성을 변경하고 (이후에는 정상으로 되돌리려 고합니다) 모든 것에 대해 걱정할 필요가 없습니다. –
아마도 액션을 모듈에 캡슐화하고 모듈에서 호출하려고 할 것입니다. 그러나 그것은 이전에 언급 된 것처럼 성가신 일이 될 것입니다. – Canardgarou
적절한 인수 (arg [x]와 "- o"또는 "- pdf"가 일치)가있는 경우 perform_now를 사용하여 호출 할 때 출력을 트리거하는 "before"또는 "after"를 정의 할 수 있습니다. – Canardgarou