如何每30分钟下载一次新闻?

时间:2013-05-17 13:24:19

标签: ruby-on-rails whenever feedzirra

我有两个型号公司和新闻 如何每30分钟下载一次新闻? 我已经尝试通过gem'随时',没有任何反应

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

2 个答案:

答案 0 :(得分:1)

每当脚本

every 15.minutes do
  rake "collect"
end

和rakefile

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

答案 1 :(得分:0)

如果你的每个脚本都要调用Company.load_news,那么该方法需要是一个类方法而不是一个实例方法:

def self.load_news

def Company.load_news

无论您的命令是什么,总是尝试在rails控制台中运行它,就像它在您的脚本中出现一样,进行调试。还要在脚本触发时检查rails日志,它应该显示任何错误,假设您的每个作业成功进入cron。