在应用程序中运行时,空节点缓存的Nokogiri响应

时间:2013-12-18 12:43:53

标签: ruby-on-rails nokogiri

我在应用程序中创建了一个类:

require 'nokogiri'
require 'csv'
require 'open-uri'

    class Scraper
        def self.test_method
            url = "http://london.craigslist.co.uk/"
            doc = Nokogiri::HTML(open(url))
            Rails.logger.debug doc.to_yaml
        end
    end

在rails控制台中调用它时:Scraper.test_method我得到一个空的节点缓存。但是,如果我直接在控制台中运行该方法的各个行,则响应是具有完整节点缓存的有效Nokogiri::HTML::Document对象。

控制台和应用程序有什么不同?

--- !ruby/object:Nokogiri::HTML::Document
decorators:
node_cache: []
errors:
- !ruby/exception:Nokogiri::XML::SyntaxError
  message: |
    Tag article invalid
  domain: 5
  code: 801
  level: 2
  file: /var/folders/lt/18lgdxts4052x8rf8xhf32v00000gn/T/open-uri20131218-62789-1tuxgqp
  line: 50
  str1: article
  str2:
  str3:
  int1: 0
  column: 28
- !ruby/exception:Nokogiri::XML::SyntaxError
  message: |
    Tag section invalid
  domain: 5
  code: 801
  level: 2
  file: /var/folders/lt/18lgdxts4052x8rf8xhf32v00000gn/T/open-uri20131218-62789-1tuxgqp
  line: 51
  str1: section
  str2:
  str3:
  int1: 0
  column: 23
- !ruby/exception:Nokogiri::XML::SyntaxError
  message: |
    Tag header invalid
  domain: 5
  code: 801
  level: 2
  file: /var/folders/lt/18lgdxts4052x8rf8xhf32v00000gn/T/open-uri20131218-62789-1tuxgqp
  line: 161
  str1: header
  str2:
  str3:
  int1: 0
  column: 36
- !ruby/exception:Nokogiri::XML::SyntaxError
  message: |
    Tag footer invalid
  domain: 5
  code: 801
  level: 2
  file: /var/folders/lt/18lgdxts4052x8rf8xhf32v00000gn/T/open-uri20131218-62789-1tuxgqp
  line: 678
  str1: footer
  str2:
  str3:
  int1: 0
  column: 9

1 个答案:

答案 0 :(得分:1)

Scraper#test_method中的最后一行是Rails.logger行,返回nil,导致您的方法返回nil。您需要在方法结束时使用return doc(或仅doc),以便返回该结果。