Rails webscraper在控制台中工作,但不在服务器上工作

时间:2012-07-24 15:44:40

标签: ruby-on-rails nokogiri

我一直在敲打一些方法并在控制台中测试它们。问题是在服务器上运行时发生错误。具体来说,下面的第一种方法会触发此NoMethod错误:

undefined method `text' for nil:NilClass

这是代码。它来自webpage.rb文件,它有一个uri列。

def download_page_title
  page_as_xml.at_css('title').text
end

def page_as_xml
  page_as_xml ||= Nokogiri::HTML(open(page_uri))
end

def page_uri
  base_uri = Site.find_by_id(self.site_id).homepage #always has "/" at end
  if self.url == base_uri
    page_uri = base_uri
  else
    page_uri = "#{base_uri}#{self.url}"
  end
end

知道我做错了什么吗?另外,任何想法为什么在控制台上顺利运行但在服务器上脱轨?

编辑:这是我在控制台中所做的一个例子。

1.9.3p194 :262 > a = Webpage.new( url: "http://www.cnn.com/", site_id:165)
 => #<Webpage id: nil, url: "http://www.cnn.com/", site_id: 165, created_at: nil, updated_at: nil, title: nil> 
1.9.3p194 :263 > a.download_page_title
  Site Load (0.3ms)  SELECT "sites".* FROM "sites" WHERE "sites"."id" = 165 LIMIT 1
 => "CNN.com - Breaking News, U.S., World, Weather, Entertainment & Video News" 

1 个答案:

答案 0 :(得分:1)

这意味着page_as_xml.at_css正在返回nil,然后您尝试在该.text个对象上调用nil

所以,弄清楚为什么会返回nil。例如,您下载的页面是否未指定可通过CSS选择器访问的title标记?页面是空白还是没有返回结果?它是否返回错误状态(不在2xx HTTP状态范围内)?

换句话说,您用于测试的页面与服务器实际获得的页面之间可能存在上游差异。

您可能需要处理(或抛出异常或日志/报告)从nil调用返回page_as_xml.at_css的页面 - 这实际上取决于您的软件需要做什么。