2010-02-23 8 views
1

HTML, XML 및 CSV 보고서를 생성하는 컨트롤러가 있습니다. 이 보고서에 사용 된 쿼리는 결과를 반환하는 데 1 분 이상 걸립니다.레일에서 장기 실행 작업

이러한 작업을 백그라운드에서 실행 한 다음 결과를 사용자에게 반환하는 가장 좋은 방법은 무엇입니까? 나는 Backgroundrb를 들여다 보았다. 내 필요에 더 기본적인 것이 있습니까?

답변

5

DelayedJob을 사용하여 이러한 쿼리를 수행하고 "NotificationQueue"라는 추가 테이블을 가질 수 있습니다. 작업이 완료되면 (결과 집합과 함께) 결과 집합과 해당 쿼리를 만든 사람의 사용자 ID를 NotificationQueue 테이블에 저장합니다. 그런 다음 모든 페이지로드시 (원하는 경우 15-20 초마다) 데이터베이스를 폴링하고 완료된 쿼리가 있는지 확인하십시오.

#Your method 
Query.do_something(params) 

#Change to 
Query.send_later(:do_something, params) 

우리는 모두를 사용하면 다음을 수행하는 것이 이 지연 작업 될 수 없습니다 것처럼 코드를 작성, 그냥 코드를 변경하기 때문에

DelayedJob 정말 대단한 직장에서의 시간, 그리고 그것은 잘 작동합니다.

+0

나는 단지 *이 디자인을 좋아한다. –

+0

DelayedJob은 유망 해 보이지만 ActiveRecord를 사용할 때 어떻게 결과 세트를 저장합니까? – Trevor

+0

DelayedJob은 기본적으로 애플리케이션 복사본을 실행합니다. 데이터베이스에 액세스 할 수 있으므로 지연된 작업을 호출하면 "Ok,이 코드를이 데이터와 함께 실행하십시오"라고 표시됩니다. 정규 함수처럼 데이터베이스에 저장됩니다. –

관련 문제