0

我正在尝试定期将一组 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 角色的用户,这些用户设置了提要字段。该脚本每 60 分钟执行一次。

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

编辑:再想一想,这是否适合在我的应用程序控制器中?每次加载页面时都会创建此调度程序的新实例,对吗?如果我是正确的,那么我可以安全地将这段代码放在哪里?

4

2 回答 2

1

回答你的第二个问题:不,这不应该在你的控制器中运行。有几种流行的 gem 可以用来制作计划任务。我会推荐“无论何时”:

https://github.com/javan/无论何时

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

于 2012-08-19T22:01:49.540 回答
0

为了避免导入以前导入的提要,您可以考虑在您的数据库中创建一个字段,例如“id_unique”,将每个提要中的任何常量变量添加到该字段,例如来自 RSS 提要的日期/时间,然后您可以在您的模型中验证 id_unique 的唯一性,或者通过 id_unique 添加一个方法到 find_or_create。

于 2012-08-19T22:46:15.420 回答