2012-12-11 2 views
2

제 3 자 사이트의 가격을 스크랩하여 다양한 제품에 대한 가격 데이터를 제공하는 레일 앱을 개발 중입니다 (http://railscasts.com/episodes/190-screen-scraping-with-nokogiri과 유사).Rails & Heroku의 주기적 작업

프로그래밍에 익숙하지 않으므로 지금 당장 레이크 작업에 코드를 삽입하여 수동으로 수행하고 있습니다. 이 작업은 내 데이터베이스의 모든 제품을 반복하고 스크래핑을 통해 가격을 업데이트합니다. (제품의 1000s가 있기 때문에) 완료하는 데 몇 시간이 걸리지 만, 대부분의 시간은 라고 부르는 것으로부터 나 자신을 제한 할 수 있습니다. 지금 나는 커맨드 라인에서 rake 태스크를 수동으로 호출하고 있지만 백그라운드에서 자동으로 실행되는 매주 정기적 인 작업을하고 싶습니다. 이 작업을 수행하는 여러 가지 방법 (Resque, DelayedJob, 크론/때마다) 내가 가장 내 필요에 맞게 것이다 모르겠지만이있는 것처럼 연구의 조금 후

, 그것은 보인다. 또한 Heroku를 통해 배포하므로 직원들에게 돈을 낭비하지 않도록하고 싶습니다. 지금 이것은 단지 부수적 인 프로젝트이기 때문에 그렇게 많이 쓰고 싶지는 않습니다.

이 작업을 수행하는 간단하고 비용 효율적인 방법은 무엇입니까?

답변

6

현재 Heroku Scheduler을 사용 중입니다. 매일, 매시간 또는 매 10 분마다 작업을 실행할 수 있습니다. 그것은 사용하기 매우 쉽습니다 :

  1. 에서, Heroku가 웹 사이트에서 앱에 이동 heroku addons:add scheduler:standard
  2. 으로 추가 기능을 설치 스케줄러-에 추가하고 새로운 작업을 추가 선택합니다. 작업 (rake name_of_your_task), 빈도 및 다음 실행을 정의하여이 작업을 수행합니다. 그리고 끝났어.

그러나, 몇 가지 문제가 있습니다

  1. 당신은 무료로, 부가 기능이 경우에도 원칙적으로이를 사용할 수 있도록 유효한 신용 카드를 제공해야합니다.

  2. 스케줄러는 귀하의 다이노 시티 시간에 포함되는 일회성 프로세스를 실행합니다.

  3. Heroku는 앱당 750 개의 무료 다이노 시간을 제공합니다.

이 스케줄러의 위키에 대한 Long-running jobs 말을하는 것입니다 :

예약 된 작업은 단기 실행 작업을 실행하거나 백그라운드 작업 큐에 작업을 실행 긴 대기열하기위한 것입니다. 완료하는 데 2 ​​분 이상 소요되는 작업은 작업자 dyno를 사용하여 실행해야합니다.

그래서 여기 내 조언은 다음과 같습니다 몇 분 동안 만 실행하는 데 의미가 더 작은 조각으로 당신의 레이크 작업 아래

  1. 휴식.

  2. 주기적으로이 작업을 실행하십시오 (스케줄러를 사용하는 주간 옵션조차도 없음).

  3. dyno 시간을 주시하십시오.당신은 그렇게 할 수 있습니다 here. 750 시간은 31 일 및 6 시간입니다. 그래서 당신은 31 일간의 근무 시간에 적어도 6 시간을 가지고 일해야합니다. 앱을 사용하지 않는 경우 다음 명령을 사용하여 앱을 사용 중지하여 일반 dyno 시간 계산을 중지 할 수도 있습니다.

    heroku ps:scale web=0 
    

    그리고 당신이

    heroku ps:scale web=1 
    

까지 다시 확장 할 수는 불행하게도 같은 것은 무료 컴퓨팅 파워가 없다.

+1

와우, 내가이 답변을 보았으므로 목록이 정말 좋아야합니다. D – Ashitaka

+0

작은 작업으로 작업을 나눌 수없는 경우 어떻게해야합니까? – slykat

+0

무엇을 시도 했습니까? 정의한 페이지 만 스크랩하고 있습니까? 그렇다면 배열 안에 넣을 수 있으며 요일에 따라 특정 인덱스에서 시작하여 배열의 다른 인덱스로 끝나는 기능을 가질 수 있습니다. 정의하지 않은 많은 페이지를 긁어 모으는 경우 하드 한도를 설정할 수 있습니다. 하루 1000 개 제품 예를 들어. 따라서 카운터가 있어야하며 1000에 도달하면 다음 페이지의 URL 또는이 ID를 저장하고 중단 한 다음날 계속할 수 있습니다. – Ashitaka

관련 문제