2011-04-06 5 views
2

저는 레일스에 웹 사이트를 작성 중이며 RSS 피드를 리드해야합니다. 스크립트는 의도 한대로 작동하지만 소스를 읽을 수 없다는 오류가 나타납니다. 소스가 존재하는지 확인하십시오.

스크립트입니다 :

def setup_feed 
    source = "http://path_to_feed/" 
    content = "" # raw content of rss feed will be loaded here 

    open(source) do |s| 
    content = s.read 
    end 
    @rss = RSS::Parser.parse(content, false) 
end 

내 관심사는 사이트가 오류 또는 그냥 "충돌"를 생성 할 것입니다 소스는 어떤 이유로 사용할 수없는 경우. 어떻게 자신을 보호 할 수 있습니까?

이 정확한 오류입니다 : 당신은이 같은 외부 요청을 처리 할 수 ​​있습니다,

class Example 
    include ActiveModel::Validations 

    ## 
    # Validates a URL 
    # 
    # If the URI library can parse the value, and the scheme is valid 
    # then we assume the url is valid 
    # 
    class UrlValidator < ActiveModel::EachValidator 
    def validate_each(record, attribute, value) 
     begin 
     uri = Addressable::URI.parse(value) 

     if !["http","https","ftp"].include?(uri.scheme) 
      raise Addressable::URI::InvalidURIError 
     end 
     rescue Addressable::URI::InvalidURIError 
     record.errors[attribute] << "Invalid URL" 
     end 
    end 
    end 

    validates :field, :url => true 
end 

답변

1

편집 는 최근 링크 발견 백그라운드에서.

그것은 여기에 간단한 예제를 제공하기 위해 조금 너무 관여하지만 주요 단계는 다음과 같습니다

  1. 가 요청을 수행하기 위해 레이크 작업을 쓰기 피드에서 데이터를 저장하는 모델을 작성, 및 레이크 작업을 주기적으로
  2. 디스플레이를 실행하는
  3. 설정을 모델로 크론 작업을 결과를 저장 페이지
에 모델의 내용

이렇게하면 페이지로드는 자신의 데이터베이스에만 의존하고 제어 할 수없는 외부 리소스에는 의존하지 않습니다.

+0

나는 URI 파서가 작동하도록 할 수 없었지만, 구조 비트를 추가 했으므로 오류를 처리하는 것처럼 보입니다. 감사합니다. – Frank

0

일반적으로 에릭 Himmelreich에 의해 http://binarysoul.com/blog/rails-3-url-validation :

Errno::ENOENT in WelcomeController#index 

No such file or directory - http://path_to_feed/ 
+0

감사합니다. Tobias, 이상적으로는 내가 할 일이고 나중에 아마 할 것입니다.하지만 그것은 긴급한 일이었습니다. 그래서 나는 그것을 빨리 수정해야했습니다. 나중에 그것을 구현할 수 있도록 귀하의 조언을 염두에 두십시오. – Frank

관련 문제