【问题标题】:Getting Nokogiri to work with Delayed jobs让 Nokogiri 处理延迟的工作
【发布时间】:2011-05-09 02:10:59
【问题描述】:

我试图让 Nokogiri 在延迟作业时表现良好,但到目前为止还不是很成功。

基本上我试图在后台运行解析任务,但是当后台工作人员点击我的执行方法时,它会在以下行中失败:

HTML_page = Nokogiri::HTML(open('http://www.mysite.com'))

错误信息是:

Nokogiri::HTML::Document#inspect 因 ArgumentError 失败:需要 Node、NodeSet 或 String 参数,并且不能接受 Delayed::Backend::ActiveRecord::Job。

Delayed::Jobs.enqueuedelay 方法都会发生这种情况。

如果我在控制台中尝试以下行,我会得到同样的错误:

Nokogiri::HTML(open('http://www.mysite.com')).delay

这可能是一个愚蠢的疏忽,因为我对 Ruby 和 Rails 还很陌生,所以非常感谢任何帮助。

【问题讨论】:

    标签: ruby-on-rails ruby nokogiri delayed-job


    【解决方案1】:

    既然 Nokogiri “需要一个 Node、NodeSet 或 String 参数”,为什么不给它一个呢?

    代替:

    HTML_page = Nokogiri::HTML(open('http://www.mysite.com'))
    

    尝试:

    HTML_page = Nokogiri::HTML(open('http://www.mysite.com').read)
    

    这将导致 IO 读取由open 创建的文件句柄,并将正在读取的 URL 的字符串内容传递给 Nokogiri。

    另一种帮助调试问题的方法(我认为这不是 Nokogiri 内部的问题)是将您的命令拆分一下:

    body = open('http://www.mysite.com').read
    HTML_page = Nokogiri::HTML(body)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多