0

我有两个模型 Company 和 News 如何让新闻每 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
4

2 回答 2

1

每当脚本

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
于 2013-05-20T10:42:47.710 回答
0

如果您的脚本随时调用Company.load_news,则该方法需要是类方法而不是实例方法:

def self.load_news

或者

def Company.load_news

无论您使用什么命令,请始终尝试在 rails 控制台中运行它,就像它出现在您的 when 脚本中一样,以调试它。还要在脚本触发时检查您的 rails 日志,它应该显示任何错误,假设您的工作成功地将其放入 cron 中。

于 2013-05-19T03:02:47.807 回答