2010-12-09 3 views
1

다른 웹 사이트에서 데이터를 가져 오기 위해 스크래퍼를 작성하기 시작합니다. 나는 첫 번째 스크레이퍼를 레이크 파일에 만들었고 이제 두 번째 레이크 파일을 작성하여 두 번째 사이트에서 데이터를 가져옵니다. 지금 당장은 내가 관심이있는 각 사이트마다 스크레이퍼를 쓰고있다. (일반 스크레이퍼를 만들려하지 않는다.) 나를 위해레일 스크랩 레이크 작업

  1. 쓰고 레이크 작업 좋은 선택 :

    나는 3 개 질문이? 고려해야 할 대안이 있습니까?

  2. 레이크 파일에 기능/방법을 추가하려면 어떻게합니까? (미안하지만, 매우 어리석은 질문,하지만 내 코드를 구조화하는 방법을 알아낼 수 없습니다 ... 그래서 지금은 긴 메서드에서 중단되지 않은 코드의 단지 500 라인) 예를 들어, "get_description (섹션) "메서드는 페이지에서 설명을 반환합니다. 방법은 내가 긁고있는 사이트에 따라 다를 수 있습니다.

  3. RSpec으로 작업을 테스트하려면 어떻게해야합니까? 링크를 제공하고 내 작업의 출력이 기대 한 것과 일치하는지 확인하고 싶습니다.

감사합니다. 당신은, 당신은 또한 DSL 레이크가 당신을 제공하는 것보다 더 표준 루비와 같은 구문을 사용 thor을 확인할 수 있습니다 그것을 사용하려는 경우

답변

3

일반적인 원칙으로, 레이크 작업은 매우 미미해야합니다. 실제 동작을 실제 클래스로 참조하십시오. 이러한 클래스는 쉽게 테스트 할 수 있습니다.

예 :

task :scrape do 
    Scraper.scrape! 
end 

class Scraper 
    def self.scrape! 
    # do something 
    end 
end 

describe Scraper do 
    # your tests 
end 

당신 수, @ 브래드는 이론적으로는 작업 자체를 테스트하는 것이 더 쉬울 수 있어야하므로, 그 자체로 일반 클래스 구조를 가지고 사용 토르를 표시한다. 나는 그렇게하지 않았다.

레이크에서 메서드를 정의 할 수 있지만 끝나는 위치를 알 수 없습니다. 그렇게해서는 안되므로 신경 쓰지 마세요. 작업 본문을 최소한으로 유지하고 정상적인 코드를 작성하여 더러운 작업을 수행하십시오.

+0

위대한,이 많은 도움이! 이것이 내가 따라야하는 경로 인 것 같습니다. 한가지 질문 : Scraper 특정 모델이 레일스 앱의 "models"폴더에있는 것을 피하고 싶습니다. Scraper 특정 모델 (일반적인 기능은 scraper.rb, site1은 특정 기능을위한 site1.rb 등)을위한 폴더를 어떻게 만들 수 있습니까? 내 레이크 작업을 "보"시겠습니까? – alex

+0

'app/scraper/site1.rb'와 같은 것을 만듭니다. Rails 3을 사용하고 있다면, 자동으로 (게으른)로드 될 app 디렉토리를 app에 추가 할 수 있습니다.태스크를위한 환경을로드하십시오 :'task : site_1 => : environment do'. 전체 레일 env를로드하지 않으려면 파일을 수동으로 요구하십시오. – iain

+0

좋습니다! 나는 여전히 2.3.8에있다. 그래서 ** 환경 .rb 파일에 ** config.load_paths << "# RAILS_ROOT}/app/scrapers"**를 추가하여 폴더를로드해야했다. 도와 주셔서 감사합니다! – alex

1
  1. 물론 레이크는 괜찮습니다.

  2. 레이크는 다른 루비 라이브러리이므로 원하는 곳에 포함 할 수 있습니다. 따라서 독자적인 라이브러리를 작성하여 레이크 파일에로드 할 수 있습니다. 예를 들어 Bundler does it을 확인하십시오. 그들은 방금 자신의 클래스를 정의한 다음 그 안에 작업을 작성했습니다. 그것은 어떻게해서든지 내가 모을 수있는 것에서 그 작업을 갈퀴로 옮기고, 그것을 철저하게 조사하지는 않았지만, 나는 잘못 될 수 있습니다.

  3. 당신이 당신의 자신의 도서관에서 일을 정의하는 경우, 당신은 일반적으로 다른 프로젝트에 대해 다음 어떤 수단 레이크 또는 토르에 해당 라이브러리를 훅하는 것처럼 단지 RSpec에 사용하고 당신은 인종에 떨어져있어

관련 문제