2010-11-18 2 views
1

난 레일 앱을 실행 중이며, 백그라운드에서 연속 프로세스가 필요합니다. 사용자는 프로세스 내부에있는 목록에 트랜잭션으로 추가 된 다음 계속 실행되는 알고리즘에 따라 함께 쌍이됩니다.레일 배경 프로세스/데이터 구조

사용자가 일정 시간 기다렸다가 알고리즘을 실행해야하기 때문에 각 사용자가 추가 된 후에 알고리즘을 실행하지 못하게됩니다.

이것이 가능합니까? 기본적으로 지속적으로 실행되고 백그라운드에서 diff 시간에 액세스되는 데이터 구조가 필요합니다.

감사합니다!

답변

2

delayed_job은 잘 작동하며 통합하기가 쉽습니다. 백그라운드에서 임의로 실행할 수도 있습니다. 그것은 끊임없이 응용 프로그램을로드하고 언로 드하는 스크립트/러너와 달리 작업자로 레일 앱을로드하고 메모리에 유지합니다. DJ는 DB를보고 일자리를 찾습니다. 나는 다른 서버가 앱 서버와 별도로 백그라운드 작업을 처리하는 사이트를 설정하기까지했다.

+0

다른 답변에 대한 내 의견을 볼 수 있습니까? dj가 백그라운드 데이터 구조를 처리 할 수 ​​있습니까? – Danny

+0

데이터 구조를 명확히 할 수 있습니까? 해시 또는 사용자와 함께로드되는 항목인가요? 아니면 모든 요청에서 메모리에 저장됩니까? 백그라운드 작업 애플 리케이션의 몇 가지와 함께, 당신은 데이터베이스에 직렬화되고 다시로드되는 인수를 전달할 수 있습니다. – Caleb

+0

예. 따라서 대부분 수정되는 큰 트리 유형 구조가 될 가능성이 큽니다. 그게 가능하다고 생각하니? 감사! – Danny

1

Workling 및 Starling을 살펴보십시오.

+0

그래서 나는 그것들을 살펴 봤고 당신이 실행할 수있는 백그라운드 작업/방법을 이해하지만 이것이 어떻게 백그라운드에서 지속적으로 실행되는 데이터 구조를 가질 수 있는지 확신 할 수 없습니다. 끊임없이 업데이트 할 수있는 큰 바이너리 트리를 상상해보십시오. 어떤 아이디어? – Danny

0

cron 및/또는 셸 스크립트 또는 배치 파일과 rake 또는 Rail의 script runner을 사용하여 수행 할 수 있습니다.

cron을 사용하면 작업이 실행되는 간격 (예 : 5 분마다)을 지정할 수 있습니다. 또는 시스템 시작시 시작된 다음 잠시 동안 잠자기 후 코드를 실행 한 다음 다시 잠자기 상태로 돌아가 무기한 반복 할 수있는 스크립트를 작성할 수 있습니다.

또는 스크립트를 실행하여 동작을 실행 한 다음 내부적으로 잠자기 상태가되어 다시 깨어서 실행 한 다음 다시 잠잘 수 있습니다.

레일의 script runner을 사용하면 레일스 앱이 알고있는 모든 것에 액세스 할 수 있다는 이점이 있습니다. 단점은 앱이 시작할 때마다 Rails 초기화 루틴을 실행해야하기 때문에 앱이 시작하는 데 더 오래 걸리는 것입니다. 따라서 내가 잠자는 동안 반복 작업을하는 것에 대해 언급했습니다.