2011-05-07 4 views
0

다음은 필자의 시나리오입니다. 직렬 포트에 데이터가 입력되었습니다. 이 데이터를 계속 수집하여 데이터베이스에 저장하고 싶습니다. 그럼 레일 애플 리케이션은 데이터베이스 에서이 데이터를 사용하고 그래프와 물건 같은 일부 통계를 보여줍니다.Ruby on Rails : 백그라운드에서 데이터를 수집하고 DB에 저장하십시오.

그럼 내 질문은 어떻게 레일 애플 리케이션에서 별도의 스레드 에서이 데이터를 수집 할 수 있습니다 나머지 것들은 데이터베이스에서 다른 레일 애플 리케이션처럼 작동합니다.

더 좋은 방법이 있다면 조언을 구하십시오.

추신 : 직렬 포트에서 읽는 데 문제가 없습니다. 이것은 별도의 스레드에 레일 애플 리케이션 에서이 작업을 수행하는 방법에 대해입니다.

답변

1

delayed_job 보석을 사용하십시오.

Delayed_job (또는 DJ)는 비동기 배경에서 더 이상 작업을 실행하는 일반적인 패턴을 캡슐화합니다.

+0

혼란 스럽습니다. 이것이 내 사건에 어떻게 도움이 될지 조금 자세하게 설명해 주실 수 있습니까? – Shaunak

+0

당신은이 보석에 관한 railcast를 볼 수 있습니다 - http://railscasts.com/episodes/171-delayed-job 또는 텍스트 버전 - http://asciicasts.com/episodes/171-delayed-job –

+0

오케이! 나는 방금 레일 캐스트를 보았고, 내가 필요로하는 것과 똑같은 것처럼 보였다. 그래도 몇 가지 질문이 있습니다. railcast의 send_later 메소드는 컨트롤러의 특정 메소드에서 호출됩니다. 난 레일 애플 리케이션이 시작 (서버가 시작) 즉시 내 작업을 시작합니다. 또한 내가 실행중인 작업은 컨트롤러와 아무런 연결이 없으므로 send_later를 사용하여 호출 할 메소드를 어디에 추가해야합니까? 그리고 마침내 내 일이 무기한으로 진행됩니다. 어떻게이 합의에 영향을 줍니까? – Shaunak

1

체크 아웃 수있는 또 다른 점은 작업 대기열로 레디 스를 사용한다, github에이 출판 resque gem이며, 매우 편리한 웹 인터페이스, 작업 스레드를 제어하는 ​​데 도움이 있습니다. 지연된 작업과 매우 유사하지만 더 나은 방법으로 요구 사항을 충족시킬 수 있습니다.