2011-05-09 40 views
1

我想让Nokogiri在延迟工作时使用它,但迄今还没有非常成功。获取Nokogiri与延迟工作

基本上我想在后台运行一个解析任务,但是当背景工人打我的执行方法,在下面的行失败:

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

的错误信息是:

Nokogiri::HTML::Document#inspect failed with ArgumentError: Requires a Node, NodeSet or String argument, and cannot accept a Delayed::Backend::ActiveRecord::Job.

这种情况发生在Delayed::Jobs.enqueuedelay方法中。

如果我尝试下面的控制台行,我得到了同样的错误:

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

,因为我是相当新的Ruby和Rails这可能是一个愚蠢的监督,所以任何帮助将不胜感激。

回答

0

由于Nokogiri“需要节点,NodeSet或String参数”,为什么不给它一个?

相反的:

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

尝试:

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

这将导致IO通过open读取创建的文件句柄,并通过引入nokogiri的URL字符串内容被读取。

的另一种方法来帮助调试问题,我不认为中引入nokogiri谎言,就是分裂您的命令了一下:

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