检查源是否存在

时间:2011-04-06 09:26:07

标签: ruby-on-rails rss

我正在用Rails写一个网站,我需要reed一个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

我担心的是,如果源无法出于任何原因,该网站将产生错误或“崩溃”。我怎样才能保护自己免受这种伤害?

这是确切的错误:

Errno::ENOENT in WelcomeController#index

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

2 个答案:

答案 0 :(得分:1)

修改 找到了一个更新的链接:Eric Himmelreich的http://binarysoul.com/blog/rails-3-url-validation

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 :(得分:0)

通常,您需要在后台处理此类外部请求。

这里提供一个简单的例子有点过于复杂,但主要步骤是:

  1. 创建模型以存储Feed中的数据
  2. 编写rake任务以执行请求,并将结果保存到模型中
  3. 设置cron作业以定期运行rake任务
  4. 在页面上显示模型的内容
  5. 这样,页面加载仅依赖于您自己的数据库,而不依赖于您可能无法控制的任何外部资源。