Ruby on Rails和Nokogiri:如何使用rake任务更新数据库中的属性

时间:2014-09-14 04:30:03

标签: ruby-on-rails ruby rss nokogiri

我正在开发一个rails应用程序,我从BBC获取RSS新闻故事。然后,我会从RSS订阅源中存储新闻报道的标题,摘要和网址。我的数据库中的图像最初有一个空白列,因为我访问了故事的网址,然后使用nokogiri通过rake任务抓取主图像的网址。一旦我有图像的URL,我尝试将具有新更新属性的项目保存到我的数据库。但是,每当我运行我的rake任务时,它都无法工作,我会收到错误。这是代码:

task :getimg => :environment do

stories = FeedEntry.all

    stories.each do |story|

        url = story.url

        doc = Nokogiri::HTML(open(url))

        if doc.at_css(".full-width img")
            img = doc.at_css(".full-width img")[:src]
            story.image = img #my attempt to update the story's attribute
            story.save! #does this save work?
        elsif doc.at_css(".body-width img")
            img = doc.at_css(".body-width img")[:src]
            story.image = img # my attempt to update the story's attribute
            story.save! #does this save work?
        end


    end
end

FeedEntry是我的新闻故事模型,这是控制台中的输出:

rake getimg --trace
** Invoke getimg (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute getimg
rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - http://www.bbc.co.uk/news/world-africa-29184590#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa
/Users/abhasarya/rails_projects/news_reader/lib/tasks/image_scraper.rake:9:in `initialize'

我知道我做错了什么,如果有人能指出解决方案,我会非常感激。谢谢!

1 个答案:

答案 0 :(得分:1)

你需要在你的佣金任务中要求'open-uri'

require 'open-uri'
doc = Nokogiri::HTML(open(url))