2013-05-17 70 views
0

我有两个模型公司和新闻 如何使新闻每30分钟下载一次? 我已经通过宝石“只要”尝试,什么都不会发生如何让新闻每30分钟下载一次?

class Company < ActiveRecord::Base 
    after_save :load_news 

    def load_news 
    last_entry = self.news.last 
    if last_entry.nil? 
     feed = Feedzirra::Feed.fetch_and_parse(self.url) 
    else 
     feed = Feedzirra::Feed.fetch_and_parse(self.url, 
     :if_modified_since => last_entry.published_at.to_time) 
    end 

    Company.add_entries(feed.entries, self.id) 
    end 

    def self.update_all_feeds(urls) 
    Feedzirra::Feed.fetch_and_parse(urls, 
     :on_success => lambda { |url, feed| 
     rss = Comapny.select("companies.id").where(:url => url).first 
     Company.add_entries(feed.entries, rss.id) 
     } 
    ) 
    end 

end 

class News < ActiveRecord::Base 
    attr_accessible :content, :guid, :name, :published_at, :summary, :url, :company_id 
end 
+0

随着一个名为新闻类,我希望你有东西在你的初始化,以避免单一新闻项目简称为“新”。这只是乞求与红宝石的'新'方法冲突。我会将其重命名为NewsItem或其他类似的。除此之外,你的每个配置究竟是什么样的?这项工作是否出现在您的cron工作中?对于每30分钟进行一次背景提取,这并不是一个好方法。 – sockmonk

+0

我没有任何经验。但是我会用delayed_job或者sidekick做时间的事情。 – Mindbreaker

+1

@sockmonk'every 1.hours do runner“Company.load_news” end' – Anton

回答

1

每当scpript

every 15.minutes do 
    rake "collect" 
end 

和耙文件

task :collect => :environment do 
    urls = Company.select("companies.url").all.map { |v| v[:url] } 
    Company.update_all_feeds(urls) 
end 
0

如果您无论何时脚本会调用Company.load_news,则该方法必须是一个类的方法,而不是一个实例方法:

def self.load_news 

def Company.load_news 

无论你的命令,总是试图在轨运行它安慰它似乎以同样的方式在你的脚本时,调试它。当脚本触发时检查你的rails日志,它应该显示任何错误,假设你的任何工作成功地将它变成cron。

相关问题