使用Feed中的Feedzirra定期导入每个用户的RSS源

时间:2012-08-19 15:36:52

标签: ruby-on-rails activerecord feedzirra

我正在尝试定期将一系列RSS提要导入到Rails中的Posts表中。我现在正试着避开Cron。这是我到目前为止(在我的应用程序控制器中)。

require 'rubygems'
require 'rufus/scheduler'
require 'feedzirra'
scheduler = Rufus::Scheduler.start_new
scheduler.every '60m' do
  @users = User.all(:joins => :roles, :conditions => {:roles => {:name => "writer"}})
  @users.each do |user|
    if user.feed.blank? 

    else
      FEEDZIRRA IMPORT CODE??
    end
  end

正如您可能已经总结的那样,RSS源的数组来自具有Writer角色的用户,他们已经设置了Feed字段。该脚本每60分钟执行一次。

我的问题是如何在不重新导入任何以前导入的帖子的情况下导入Feed?由于我刚接触编程并将其作为一个学习曲线项目,如果对使我的代码更有效有任何建设性的批评,我会全力以赴。

编辑:第二个想法,是否适合在我的应用程序控制器中?每次加载页面时都会创建此调度程序的新实例,对吧?如果我是正确的,那么我可以在哪里安全地输入这些代码?

2 个答案:

答案 0 :(得分:1)

回答你的第二个问题:不,这不应该在你的控制器中运行。有几种流行的宝石用于制定计划任务。我建议'随时':

https://github.com/javan/whenever

他们有很好的文档,应该很容易理解。任务将在config / schedule.rb文件中指定,而不是在应用程序控制器中指定。

答案 1 :(得分:0)

您可以考虑采取哪些措施来避免导入以前导入的Feed在您的数据库中创建一个字段,例如" id_unique",将每个Feed中的任何常量变量添加到此字段,例如日期/从RSS提要开始,你可以在模型中使用validates_uniqueness_of id_unique,或者通过id_unique向find_or_create添加方法。