我正在用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/
答案 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)
通常,您需要在后台处理此类外部请求。
这里提供一个简单的例子有点过于复杂,但主要步骤是:
这样,页面加载仅依赖于您自己的数据库,而不依赖于您可能无法控制的任何外部资源。