2014-09-14 1 views
0

Я работаю над приложением rails, где я получаю rss-канал от BBC для новостей. Затем я сохраняю заголовок, сводку и URL новостной ленты из rss-канала. Сначала есть пустой столбец для изображений в моем db, потому что я посещаю URL-адрес истории и использую nokogiri, чтобы очистить URL-адрес основного изображения после этой задачи. Как только у меня есть url для изображения, я пытаюсь сохранить элемент с обновленным атрибутом в моей базе данных. Однако всякий раз, когда я запускаю свою задачу рейка, она не работает, и я получаю ошибки. Вот код:Ruby on Rails и Nokogiri: как обновить атрибут в базе данных, используя команду 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

Вы должны требовать «открытого URI» в вашей передней задаче

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

Я люблю тебя, спасибо! Теперь он отлично работает! –

Смежные вопросы